Utilizzare l'API REST di Cloud Firestore

Sebbene il modo più semplice per utilizzare Cloud Firestore sia quello di utilizzare una delle librerie client native, in alcune situazioni è utile chiamare direttamente l'API REST.

L'API REST può essere utile per i seguenti casi d'uso:

  • Accesso a Cloud Firestore da un ambiente con risorse limitate, come un dispositivo IoT (Internet of Things), in cui non è possibile eseguire una libreria client completa.
  • Automatizzare l'amministrazione del database o recuperare metadati dettagliati del database.

Se utilizzi un linguaggio supportato da gRPC, valuta la possibilità di utilizzare l'API RPC anziché l'API REST.

Autenticazione e autorizzazione

Per l'autenticazione, l'API REST Cloud Firestore accetta un token ID Firebase Authentication o un token OAuth 2.0 per Google Identity. Il token che fornisci influisce sull'autorizzazione della richiesta:

  • Utilizza i token ID Firebase per autenticare le richieste degli utenti della tua applicazione. Per queste richieste, Cloud Firestore utilizza Cloud Firestore Security Rules per determinare se una richiesta è autorizzata.

  • Utilizza un token OAuth 2.0 di Google Identity e un service account per autenticare le richieste dalla tua applicazione, ad esempio le richieste di amministrazione del database. Per queste richieste, Cloud Firestore utilizza Identity and Access Management (IAM) per determinare se una richiesta è autorizzata.

Utilizzare i token ID Firebase

Puoi ottenere un token ID Firebase in due modi:

Recuperando il token ID Firebase di un utente, puoi effettuare richieste per suo conto.

Per le richieste autenticate con un token ID Firebase e per le richieste non autenticate, Cloud Firestore utilizza il tuo Cloud Firestore Security Rules per determinare se una richiesta è autorizzata.

Utilizzo dei token OAuth 2.0 di Google Identity

Puoi generare un token di accesso utilizzando un service account con una libreria client dell'API di Google o seguendo i passaggi descritti in Utilizzo di OAuth 2.0 per applicazioni da server a server. Puoi anche generare un token con lo strumento a riga di comando gcloud e il comando gcloud auth application-default print-access-token.

Per inviare richieste all'API REST Cloud Firestore, questo token deve avere il seguente ambito:

  • https://www.googleapis.com/auth/datastore

Se autentichi le tue richieste con un account di servizio e un token OAuth 2.0 di Google Identity, Cloud Firestore presuppone che le tue richieste agiscano per conto della tua applicazione anziché di un singolo utente. Cloud Firestore consente a queste richieste di ignorare le regole di sicurezza. Cloud Firestore utilizza invece IAM per determinare se una richiesta è autorizzata.

Puoi controllare le autorizzazioni di accesso dei service account assegnando ruoli IAM Cloud Firestore.

Autenticazione con un token di accesso

Dopo aver ottenuto un token ID Firebase o un token OAuth 2.0 di Google Identity, trasmettilo agli endpoint Cloud Firestore come intestazione Authorization impostata su Bearer {YOUR_TOKEN}.

Effettuare chiamate REST

Tutti gli endpoint dell'API REST si trovano nell'URL di base https://firestore.googleapis.com/v1/.

Per creare un percorso a un documento con l'ID LA nella raccolta cities nel progetto YOUR_PROJECT_ID, utilizza la seguente struttura.

/projects/YOUR_PROJECT_ID/databases/(default)/documents/cities/LA

Per interagire con questo percorso, combinalo con l'URL di base dell'API.

https://firestore.googleapis.com/v1/projects/YOUR_PROJECT_ID/databases/(default)/documents/cities/LA

Il modo migliore per iniziare a sperimentare con l'API REST è utilizzare Explorer API, che genera automaticamente i token OAuth 2.0 di Google Identity e ti consente di esaminare l'API.

Metodi

Di seguito sono riportate brevi descrizioni dei due gruppi di metodi più importanti. Per un elenco completo, consulta il riferimento dell'API REST o utilizza Explorer API.

v1.projects.databases.documents

Esegui operazioni CRUD sui documenti, simili a quelle descritte nelle guide Aggiungere dati o Recuperare dati.

v1.projects.databases.collectionGroups.indexes

Eseguire azioni sugli indici, ad esempio creare nuovi indici, disabilitare un indice esistente o elencare tutti gli indici attuali. Utile per automatizzare le migrazioni della struttura dei dati o sincronizzare gli indici tra i progetti.

Consente inoltre il recupero dei metadati dei documenti, ad esempio l'elenco di tutti i campi e le raccolte secondarie per un determinato documento.

Codici di errore

Quando una richiesta Cloud Firestore ha esito positivo, l'API Cloud Firestore restituisce un codice di stato HTTP 200 OK e i dati richiesti. Quando una richiesta non va a buon fine, l'API Cloud Firestore restituisce un codice di stato HTTP 4xx o 5xx e una risposta con informazioni sull'errore.

La tabella seguente elenca le azioni consigliate per ogni codice di errore. Questi codici si applicano alle API REST e RPC Cloud Firestore. Gli SDK e le librerie client potrebbero non restituire gli stessi codici di errore.Cloud Firestore

Codice di errore canonico Descrizione Azione consigliata
ABORTED La richiesta era in conflitto con un'altra richiesta. Per un commit non transazionale:
riprova la richiesta o ristruttura il modello di dati per ridurre la contesa.

Per le richieste in una transazione:
riprova l'intera transazione o ristruttura il modello di dati per ridurre la contesa.
ALREADY_EXISTS La richiesta ha tentato di creare un documento già esistente. Non riprovare senza risolvere il problema.
DEADLINE_EXCEEDED Il server Cloud Firestore che gestisce la richiesta ha superato una scadenza. Esegui un nuovo tentativo utilizzando il backoff esponenziale.
FAILED_PRECONDITION La richiesta non ha soddisfatto una delle sue precondizioni. Ad esempio, una richiesta di query potrebbe richiedere un indice non ancora definito. Consulta il campo del messaggio nella risposta di errore per la precondizione non riuscita. Non riprovare senza risolvere il problema.
INTERNAL Il server Cloud Firestore ha restituito un errore. Non riprovare a inviare questa richiesta più di una volta.
INVALID_ARGUMENT Un parametro della richiesta include un valore non valido. Per il valore non valido, consulta il campo del messaggio nella risposta di errore. Non riprovare senza risolvere il problema.
NOT_FOUND La richiesta ha tentato di aggiornare un documento inesistente. Non riprovare senza risolvere il problema.
PERMISSION_DENIED L'utente non è autorizzato a effettuare questa richiesta. Non riprovare senza risolvere il problema.
RESOURCE_EXHAUSTED Il progetto ha superato la quota o la capacità della regione/multiregione. Verifica di non aver superato la quota di progetto. Se hai superato una quota di progetto, non riprovare senza risolvere il problema.

Altrimenti, riprova con il backoff esponenziale.
UNAUTHENTICATED La richiesta non includeva credenziali di autenticazione valide. Non riprovare senza risolvere il problema.
UNAVAILABLE Il server Cloud Firestore ha restituito un errore. Esegui un nuovo tentativo utilizzando il backoff esponenziale.