Un servizio Firebase Data Connect ha tre componenti principali:
- Un database PostgreSQL sottostante con il proprio schema SQL
- uno schema di applicazione Data Connect (dichiarato nei file
.gql
) - un numero di connettori (dichiarati nei file
.gql
).
Lo schema SQL è la fonte attendibile dei dati, lo schema Data Connect è il modo in cui i connettori possono vedere questi dati e i connettori dichiarano le API che i client possono utilizzare per accedere ai dati.
Quando esegui il deployment del servizio Data Connect con la CLI, esegui la migrazione dello schema SQL, poi aggiorni lo schema Data Connect e infine aggiorni ciascun connettore.
Concetti importanti di deployment
Per comprendere appieno il deployment, è importante prendere nota dei concetti chiave relativi a schemi e connettori.
Deployment dello schema
Il deployment di uno schema Data Connect influisce sullo schema SQL del database Cloud SQL. Data Connect ti aiuta a eseguire la migrazione dei tuoi schemi durante il deployment, indipendentemente dal fatto che tu stia utilizzando un nuovo database o debba adattare in modo non distruttivo un database esistente.
Le migrazioni dello schema Data Connect hanno due diverse modalità di convalida dello schema: rigorosa e compatibile.
La convalida in modalità rigorosa richiede che lo schema del database corrisponda esattamente allo schema dell'applicazione prima che quest'ultimo possa essere aggiornato. Tutte le tabelle o le colonne non utilizzate nello schema Data Connect verranno eliminate dal database.
La convalida della modalità compatibile richiede che lo schema del database sia compatibile con lo schema dell'applicazione prima che quest'ultimo possa essere aggiornato. Eventuali modifiche aggiuntive che eliminano schemi, tabelle o colonne sono facoltative.
Compatibile significa che le migrazioni dello schema interessano solo le tabelle e le colonne a cui viene fatto riferimento nello schema dell'applicazione. Gli elementi del database che non vengono utilizzati dallo schema dell'applicazione vengono lasciati invariati. Di conseguenza, dopo il deployment, il database potrebbe contenere:
- Schemi
- Tabelle
- Colonne
Deployment dei connettori
Le query e le mutazioni Data Connect non vengono inviate dal codice client ed eseguite sul server. Al contrario, quando vengono implementate, queste operazioni Data Connect vengono archiviate sul server, come Cloud Functions. Ciò significa che il deployment potrebbe interrompere gli utenti esistenti.
Segui il flusso di lavoro di deployment
Puoi lavorare a un progetto Data Connect sia in una directory del progetto locale sia nella console Firebase.
Un flusso di deployment consigliato prevede:
- Elenco di schemi e connettori attualmente di cui è stato eseguito il deployment con
firebase dataconnect:services:list
. - Gestire eventuali aggiornamenti dello schema.
- Verifica le differenze dello schema SQL tra il database Cloud SQL
e lo schema Data Connect locale con
firebase dataconnect:sql:diff
. - Se necessario, esegui la migrazione dello schema SQL con
dataconnect:sql:migrate
.
- Verifica le differenze dello schema SQL tra il database Cloud SQL
e lo schema Data Connect locale con
- Esegui deployment di schema e connessione eseguendo
firebase deploy
, per solo lo schema, solo i connettori o combinazioni di risorse.
Esegui il deployment e gestisci le risorse Data Connect
È consigliabile verificare le risorse di produzione prima di eseguire i deployment.
firebase dataconnect:services:list
Quando lavori in una directory di progetto locale, in genere utilizzi il comando firebase deploy
per eseguire il deployment dello schema e dei connettori in produzione con feedback interattivo.
Utilizzando qualsiasi comando deploy
, il flag --only dataconnect
ti consente di separare i deployment di Data Connect dagli altri prodotti nel tuo progetto.
Deployment normale
firebase deploy --only dataconnect
In questo deployment normale, l'interfaccia a riga di comando Firebase tenta di eseguire il deployment dello schema e dei connettori.
Verifica che il nuovo schema non rompa i connettori esistenti. Segui le best practice quando apporti modifiche che comportano interruzioni.
Verifica inoltre che sia già stata eseguita la migrazione dello schema SQL prima di aggiornare lo schema Data Connect. In caso contrario, ti verrà chiesto automaticamente di seguire tutti i passaggi necessari per eseguire la migrazione degli schemi.
--force
deployment del flag
firebase deploy --only dataconnect --force
Se le convalide del connettore o dello schema SQL non sono un problema, puoi eseguire nuovamente il comando con --force
per ignorarle.
Il deployment --force
verifica comunque se lo schema SQL corrisponde a quello Data Connect, avvisa di incompatibilità e richiede.
Esegui il deployment delle risorse selezionate
Per eseguire il deployment con un controllo più granulare, utilizza il flag --only
con
l'argomento serviceId
. Per eseguire il deployment solo delle modifiche allo schema per un particolare servizio:
firebase deploy --only dataconnect:serviceId:schema
Puoi anche eseguire il deployment di tutte le risorse per un connettore e un servizio specifici.
firebase deploy --only dataconnect:serviceId:connectorId
Infine, puoi eseguire il deployment dello schema e di tutti i connettori per un singolo servizio.
firebase deploy --only dataconnect:serviceId
Esegui il rollback di un deployment
Per eseguire un rollback manuale, controlla una versione precedente del codice e implementala. Se il deployment originale includeva modifiche distruttive, potresti non essere in grado di recuperare completamente i dati eliminati.
Esegui la migrazione degli schemi di database
Se stai creando rapidamente prototipi, esegui esperimenti con gli schemi e sai che le modifiche allo schema sono distruttive, puoi pianificare l'utilizzo degli strumenti Data Connect per verificare le modifiche e supervisionare la modalità di aggiornamento.
Confronta le modifiche allo schema SQL
Puoi verificare le modifiche:
firebase dataconnect:sql:diff
Puoi passare un elenco di servizi separati da virgole.
Il comando confronta lo schema locale di un servizio con lo schema corrente del database Cloud SQL corrispondente. Se esiste una differenza, vengono stampati i comandi SQL che verranno eseguiti per correggerla.
Applica le modifiche
Quando hai finito e vuoi implementare le modifiche allo schema dell'istanza Cloud SQL, esegui il comando firebase dataconnect:sql:migrate
. Ti verrà chiesto di approvare le modifiche.
firebase dataconnect:sql:migrate [serviceId]
Negli ambienti interattivi vengono visualizzati comandi di migrazione SQL e richieste di azione.
Migrazione in modalità con restrizioni o compatibile
In un progetto nuovo di zecca, viene applicata la modalità di convalida dello schema predefinita. Il comportamento del comando migrate
è applicare tutte le modifiche allo schema del database richieste dallo schema dell'applicazione, quindi ti chiede di approvare operazioni facoltative che eliminano schemi, tabelle o colonne per forzare lo schema del database a corrispondere esattamente allo schema dell'applicazione.
Puoi regolare questo comportamento modificando il file dataconnect.yaml
.
Rimuovi il commento dalla chiave schemaValidation
e dichiara COMPATIBLE
in modo che solo le modifiche obbligatorie vengano applicate nelle migrazioni.
schemaValidation: "COMPATIBLE"
In alternativa, imposta il comportamento su STRICT
in modo che tutte le modifiche allo schema vengano applicate e lo schema del database venga forzato in modo che corrisponda allo schema dell'applicazione.
schemaValidation: "STRICT"
Consulta il riferimento per l'interfaccia a riga di comando di Data Connect per ulteriori informazioni.
Best practice per la gestione di schemi e connettori
Firebase consiglia alcune pratiche da seguire nei tuoi progetti Data Connect.
Riduci al minimo le modifiche che provocano un errore
- Firebase consiglia di mantenere i file dello schema e del connettore Data Connect nel controllo del codice sorgente.
- Se possibile, evita modifiche che provocano errori. Ecco alcuni esempi comuni di modifiche che comportano interruzioni:
- Rimozione di un campo dallo schema
- Impostare un campo nullable nello schema come non nullable (ad es.
Int
->Int!
) - Rinominare un campo nello schema.
- Se devi rimuovere un campo dallo schema, valuta la possibilità di suddividerlo in più deployment per ridurre al minimo l'impatto:
- Innanzitutto, rimuovi eventuali riferimenti al campo nei connettori ed esegui il deployment della modifica.
- Aggiorna le app in modo che utilizzino gli SDK appena generati.
- Infine, rimuovi il campo nel file dello schema
.gql
, esegui la migrazione dello schema SQL e esegui di nuovo il deployment.
Utilizza la modalità rigorosa quando lavori con nuovi database
Se utilizzi Data Connect con un nuovo database e stai sviluppando attivamente lo schema dell'applicazione e vuoi assicurarti che lo schema del database rimanga esattamente in linea con lo schema dell'applicazione, puoi specificare schemaValidation: "STRICT"
in dataconnect.yaml
.
In questo modo verranno applicate anche le modifiche facoltative.
Utilizza la modalità compatibile quando nel database sono presenti dati di produzione
Se apporti modifiche a un database contenente dati di produzione, ti consigliamo di eseguire le migrazioni dello schema in modalità compatibile per assicurarti che i dati esistenti non vengano eliminati. Puoi specificare schemaValidation: "COMPATIBLE"
nel tuo dataconnect.yaml
In modalità compatibile, al database vengono applicate solo le modifiche richieste per la migrazione dello schema.
DROP SCHEMA
,DROP TABLE
eDROP COLUMN
sono considerate istruzioni facoltative e non verranno generate per il piano, anche se lo schema del database contiene schemi, tabelle o colonne non definiti nello schema dell'applicazione.- Se la tabella di database contiene una colonna non null non inclusa nello schema dell'applicazione, il vincolo
NOT NULL
verrà rimosso in modo che i dati possano essere comunque aggiunti alla tabella con i connettori definiti.
Quali sono i passaggi successivi?
- Il deployment e la gestione del codice client sviluppato con gli SDK generati sono trattati nelle guide per Android, iOS, web e Flutter.
- Per ulteriori informazioni sugli strumenti di deployment, consulta la documentazione di riferimento dell'interfaccia a riga di comando Data Connect e la documentazione di riferimento del file di configurazione Data Connect.