L'Firebase Hosting API REST permet des déploiements programmatiques et personnalisables sur vos sites hébergés par Firebase. Utilisez cette API REST pour déployer du contenu Hosting et une configuration nouveaux ou mis à jour.
Au lieu d'utiliser la Firebase CLI pour
les déploiements, vous pouvez utiliser l'API REST Firebase Hosting pour créer de manière programmatique une version d'assets pour votre site, importer des fichiers dans la version, puis déployer la version sur
votre site.
Par exemple, avec l'API REST Firebase Hosting, vous pouvez effectuer les opérations suivantes :
Planifier des déploiements. En utilisant l'API REST conjointement avec une tâche cron, vous pouvez modifier le contenu hébergé par Firebase à intervalles réguliers (par exemple, pour déployer une version spéciale de votre contenu pour les fêtes ou un événement).
Intégrer des outils pour les développeurs. Vous pouvez créer une option dans votre outil pour déployer vos projets d'application Web sur Firebase Hosting en un seul clic (par exemple, en cliquant sur un bouton de déploiement dans un IDE).
Automatiser les déploiements lorsque du contenu statique est généré. Lorsqu'un processus génère du contenu statique de manière programmatique (par exemple, du contenu généré par l'utilisateur, tel qu'un wiki ou un article d'actualité), vous pouvez déployer le contenu généré en tant que fichiers statiques plutôt que de le diffuser de manière dynamique. Cela vous permet d'économiser de la puissance de calcul coûteuse et de diffuser vos fichiers de manière plus évolutive.
Ce guide explique d'abord comment activer, authentifier et autoriser l'API. Il présente ensuite un exemple de création d'une Firebase Hosting version, d'importation des fichiers requis dans la version, puis de déploiement de la version.
Pour en savoir plus sur cette API REST, consultez la documentation de référence complète de l'API REST Hosting.
Avant de commencer : activer l'API REST
Vous devez activer l'API REST Firebase Hosting dans la console Google APIs :
Ouvrez la Firebase Hosting page de l'API dans la console Google APIs.
Lorsque vous y êtes invité, sélectionnez votre projet Firebase.
Cliquez sur Activer sur la page de l'API Firebase Hosting.
Étape 1 : Obtenir un jeton d'accès pour authentifier et autoriser les requêtes API
Les projets Firebase sont compatibles avec les comptes de service Google, que vous pouvez utiliser pour appeler les API serveur Firebase à partir de votre serveur d'application ou de votre environnement de confiance. Si vous développez du code localement ou déployez votre application sur site, vous pouvez utiliser les identifiants obtenus à l'aide de ce compte de service pour autoriser les requêtes serveur.
Vous pouvez afficher tous les comptes de service de votre projet Firebase dans les
Pour authentifier un compte de service et l'autoriser à accéder aux services Firebase, vous devez générer un fichier de clé privée au format JSON.
Pour générer un fichier de clé privée pour votre compte de service :
Dans la console Firebase, accédez aux
Paramètres > Comptes de service, sous l'onglet.Cliquez sur Générer une nouvelle clé privée, puis confirmez en cliquant sur Générer une clé.
Stockez le fichier JSON contenant la clé en lieu sûr.
Utilisez vos identifiants Firebase avec la bibliothèque Google Auth pour le langage de votre choix afin de récupérer un jeton d'accès OAuth 2.0 éphémère :
Node.js
const {google} = require('googleapis'); function getAccessToken() { return new Promise(function(resolve, reject) { var key = require('./service-account.json'); var jwtClient = new google.auth.JWT( key.client_email, null, key.private_key, SCOPES, null ); jwtClient.authorize(function(err, tokens) { if (err) { reject(err); return; } resolve(tokens.access_token); }); }); }
Dans cet exemple, la bibliothèque cliente de l'API Google authentifie la requête avec un jeton Web JSON (JWT). Pour en savoir plus, consultez Jetons Web JSON.
Python
def _get_access_token(): """Retrieve a valid access token that can be used to authorize requests. :return: Access token. """ credentials = ServiceAccountCredentials.from_json_keyfile_name( 'service-account.json', SCOPES) access_token_info = credentials.get_access_token() return access_token_info.access_token
Java
private static String getAccessToken() throws IOException { GoogleCredential googleCredential = GoogleCredential .fromStream(new FileInputStream("service-account.json")) .createScoped(Arrays.asList(SCOPES)); googleCredential.refreshToken(); return googleCredential.getAccessToken(); }
Une fois votre jeton d'accès expiré, la méthode d'actualisation du jeton est appelée automatiquement pour récupérer un jeton d'accès mis à jour.
Étape 2 : Vérifier que votre projet dispose d'un site Hosting par défaut
Avant votre premier déploiement sur Firebase Hosting, votre projet Firebase doit
disposer d'un
Hosting SITE.
Vérifiez si votre projet dispose déjà d'un site Hosting par défaut en appelant le
sites.listpoint de terminaison.Exemple :
Commande cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sitesRequête HTTPS brute
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
Si l'un des sites comporte
"type": "DEFAULT_SITE", votre projet dispose déjà d'un site Hosting par défaut. Ignorez le reste de cette étape, et passez à l'étape suivante : Créer une version pour votre site.Si vous obtenez un tableau vide, vous ne disposez pas d'un site Hosting par défaut. Suivez le reste de cette étape.
Décidez du
SITE_IDpour votre site Hosting par défaut. Tenez compte des points suivants lorsque vous choisissez ceSITE_ID:Ce
SITE_IDest utilisé pour créer vos sous-domaines Firebase par défaut :
etSITE_ID.web.app .SITE_ID.firebaseapp.comUn
SITE_IDdoit répondre aux exigences suivantes :- Doit être un libellé de nom d'hôte valide, ce qui signifie qu'il ne peut pas contenir de caractères tels que
.,_, etc. - Doit comporter 30 caractères ou moins
- Doit être globalement unique dans Firebase
- Doit être un libellé de nom d'hôte valide, ce qui signifie qu'il ne peut pas contenir de caractères tels que
Notez que nous recommandons souvent d'utiliser l'ID du projet comme le
SITE_IDpour votre site Hosting par défaut. Pour savoir comment trouver cet ID, consultez Comprendre les projets Firebase.Créez votre site Hosting par défaut en appelant le
sites.createpoint de terminaison à l'aide duSITE_IDsouhaité comme paramètresiteId.Exemple :
Commande cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites?siteId=SITE_IDRequête HTTPS brute
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
Cet appel d'API à
sites.createrenvoie le JSON suivant :{ "name": "projects/PROJECT_ID/sites/SITE_ID", "defaultUrl": "https://SITE_ID.web.app", "type": "DEFAULT_SITE" }
Étape 3 : Créer une version pour votre site
Votre premier appel d'API consiste à créer un nouveau
Version pour votre site.
Plus loin dans ce guide, vous importerez des fichiers dans cette version, puis vous la déploierez sur votre site.
Déterminez le SITE_ID du site sur lequel vous souhaitez effectuer le déploiement.
Appelez le versions.create point de terminaison en utilisant votre SITE_ID dans l'appel.
(Facultatif) Vous pouvez également transmettre un Firebase Hosting objet de configuration dans l'appel, y compris en définissant un en-tête qui met en cache tous les fichiers pendant une durée spécifiée.
Exemple :
Commande cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -d '{ "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }' \ https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versionsRequête HTTPS brute
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/versions HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json Content-Length: 134 { "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }
Cet appel d'API à versions.create renvoie le JSON suivant :
{
"name": "sites/SITE_ID/versions/VERSION_ID",
"status": "CREATED",
"config": {
"headers": [{
"glob": "**",
"headers": {
"Cache-Control": "max-age=1800"
}
}]
}
}Cette réponse contient un identifiant unique pour la nouvelle version, au format :
sites/SITE_ID/versions/VERSION_ID. Vous aurez besoin de cet identifiant unique tout au long de ce guide pour faire référence à cette version spécifique.
Étape 4 : Spécifier la liste des fichiers que vous souhaitez déployer
Maintenant que vous disposez de l'identifiant de votre nouvelle version, vous devez indiquer à Firebase Hosting les fichiers que vous souhaitez déployer dans cette nouvelle version.
Notez que la taille maximale des fichiers individuels est de 2 Go pour Hosting.
Cette API vous oblige à identifier les fichiers par un hachage SHA256. Par conséquent, avant de pouvoir effectuer l'appel d'API, vous devez d'abord calculer un hachage pour chaque fichier statique en compressant les fichiers au format Gzip, puis en prenant le hachage SHA256 de chaque fichier nouvellement compressé.
Pour poursuivre notre exemple, supposons que vous souhaitez déployer trois fichiers dans la nouvelle version : file1, file2 et file3.
Compressez les fichiers au format Gzip :
gzip file1 && gzip file2 && gzip file3
Vous disposez maintenant de trois fichiers compressés :
file1.gz,file2.gzetfile3.gz.Obtenez le hachage SHA256 de chaque fichier compressé :
cat file1.gz | openssl dgst -sha256 66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4
cat file2.gz | openssl dgst -sha256 490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083
cat file3.gz | openssl dgst -sha256 59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315
Vous disposez maintenant des trois hachages SHA256 des trois fichiers compressés.
Envoyez ces trois hachages dans une requête API au
versions.populateFilespoint de terminaison. Répertoriez chaque hachage par le chemin d'accès souhaité pour le fichier importé (dans cet exemple,/file1,/file2et/file3).Exemple :
Commande cURL
$ curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -d '{ "files": { "/file1": "66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4", "/file2": "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "/file3": "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" } }' \ https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions/VERSION_ID:populateFilesRequête HTTPS brute
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/versions/VERSION_ID:populateFiles HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json Content-Length: 181 { "files": { "/file1": "66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4", "/file2": "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "/file3": "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" } }
Cet appel d'API à versions.populateFiles renvoie le JSON suivant :
{ "uploadRequiredHashes": [ "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" ], "uploadUrl": "https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files" }
Cette réponse inclut les éléments suivants :
Le hachage de chaque fichier à importer. Par exemple, dans cet exemple,
file1avait déjà été importé dans une version précédente. Son hachage n'est donc pas inclus dans la listeuploadRequiredHashes.L'
uploadUrl, qui est spécifique à la nouvelle version.
À l'étape suivante, pour importer les deux nouveaux fichiers, vous aurez besoin des hachages et de l'uploadURL de la réponse versions.populateFiles.
Étape 5 : Importer les fichiers requis
Vous devez importer individuellement chaque fichier requis (ceux qui sont listés dans uploadRequiredHashes à partir de la réponse versions.populateFiles de l'étape précédente). Pour ces importations de fichiers, vous aurez besoin des hachages de fichiers et de l'uploadUrl de l'étape précédente.
Ajoutez une barre oblique et le hachage du fichier à l'
uploadUrlpour créer une URL spécifique au fichier au format :https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH.Importez tous les fichiers requis un par un (dans cet exemple, uniquement
file2.gzetfile3.gz) vers l'URL spécifique au fichier à l'aide d'une série de requêtes.Par exemple, pour importer le fichier compressé
file2.gz:Commande cURL
curl -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/octet-stream" \ --data-binary @./file2.gz \ https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASHRequête HTTPS brute
Host: upload-firebasehosting.googleapis.com POST /upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/octet-stream Content-Length: 500 content-of-file2.gz
Les importations réussies renvoient une réponse HTTPS 200 OK.
Étape 6 : Définir l'état de la version sur FINALIZED
Une fois que vous avez importé tous les fichiers listés dans la réponse versions.populateFiles, vous pouvez définir l'état de votre version sur FINALIZED.
Appelez le versions.patch
point de terminaison avec le champ status de votre requête API défini sur FINALIZED.
Exemple :
Commande cURL
curl -H "Content-Type: application/json" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-X PATCH \
-d '{"status": "FINALIZED"}' \
https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions/VERSION_ID?update_mask=status
Requête HTTPS brute
Host: firebasehosting.googleapis.com
PATCH /v1beta1/sites/SITE_ID/versions/VERSION_ID?update_mask=status HTTP/1.1
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
Content-Length: 23
{"status": "FINALIZED"}Cet appel d'API à versions.patch renvoie le JSON suivant. Vérifiez que status a été mis à jour sur FINALIZED.
{ "name": "sites/SITE_ID/versions/VERSION_ID", "status": "FINALIZED", "config": { "headers": [{ "glob": "**", "headers": {"Cache-Control": "max-age=1800"} }] }, "createTime": "2018-12-02T13:41:56.905743Z", "createUser": { "email": "SERVICE_ACCOUNT_EMAIL@SITE_ID.iam.gserviceaccount.com" }, "finalizeTime": "2018-12-02T14:56:13.047423Z", "finalizeUser": { "email": "USER_EMAIL@DOMAIN.tld" }, "fileCount": "5", "versionBytes": "114951" }
Étape 7 : Publier la version pour le déploiement
Maintenant que vous disposez d'une version finalisée, publiez-la pour le déploiement. Pour cette étape,
vous devez créer un
Release de votre version
qui contient la configuration d'hébergement et tous les fichiers de contenu de votre nouvelle
version.
Appelez le releases.create
point de terminaison pour créer votre version.
Exemple :
Commande cURL
curl -H "Authorization: Bearer ACCESS_TOKEN" \
-X POST
https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID
Requête HTTPS brute
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID HTTP/1.1 Authorization: Bearer ACCESS_TOKEN
Cet appel d'API à releases.create renvoie le JSON suivant :
{ "name": "sites/SITE_ID/releases/RELEASE_ID", "version": { "name": "sites/SITE_ID/versions/VERSION_ID", "status": "FINALIZED", "config": { "headers": [{ "glob": "**", "headers": {"Cache-Control": "max-age=1800"} }] } }, "type": "DEPLOY", "releaseTime": "2018-12-02T15:14:37Z" }
La configuration d'hébergement et tous les fichiers de la nouvelle version doivent maintenant être déployés sur votre site, et vous pouvez accéder à vos fichiers à l'aide des URL suivantes :
https://SITE_ID.web.app/file1https://SITE_ID.web.app/file2https://SITE_ID.web.app/file3
Ces fichiers sont également accessibles sur les URL associées à votre
SITE_ID.firebaseapp.com domaine.
Vous pouvez également voir votre nouvelle version listée dans le Hosting tableau de bord de la Firebase console.