L' API REST Firebase Hosting permet des déploiements programmatiques et personnalisables sur vos sites hébergés par Firebase. Utilisez cette API REST pour déployer du contenu et une configuration d'hébergement nouveaux ou mis à jour.
Au lieu d'utiliser la CLI Firebase pour les déploiements, vous pouvez utiliser l'API REST Firebase Hosting pour créer par programme une nouvelle version
des ressources pour votre site, télécharger des fichiers vers la version, puis déployer la version sur votre site.
Par exemple, avec l'API REST Firebase Hosting, vous pouvez :
Planifiez les déploiements. En utilisant l'API REST conjointement avec une tâche cron, vous pouvez modifier le contenu hébergé sur Firebase selon un calendrier régulier (par exemple, pour déployer une version spéciale de votre contenu liée aux vacances ou aux événements).
Intégrez les outils de développement. Vous pouvez créer une option dans votre outil pour déployer vos projets d'applications Web sur Firebase Hosting en un seul clic (par exemple, en cliquant sur un bouton de déploiement dans un IDE).
Automatisez les déploiements lorsque du contenu statique est généré. Lorsqu'un processus génère du contenu statique par programmation (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é sous forme de fichiers statiques plutôt que de le servir de manière dynamique. Cela vous permet d'économiser une puissance de calcul coûteuse et de servir vos fichiers de manière plus évolutive.
Ce guide décrit d'abord comment activer, authentifier et autoriser l'API. Ensuite, ce guide présente un exemple pour créer une version de Firebase Hosting, pour télécharger les fichiers requis vers la version, puis enfin pour déployer la version.
Vous pouvez également en savoir plus sur cette API REST dans la documentation complète de référence de l'API REST d'hébergement .
Avant de commencer : activer l'API REST
Vous devez activer l'API REST Firebase Hosting dans la console des API Google :
Ouvrez la page API Firebase Hosting dans la console des API Google.
Lorsque vous y êtes invité, sélectionnez votre projet Firebase.
Cliquez sur Activer sur la page API d'hébergement Firebase.
Étape 1 : Obtenez un jeton d'accès pour authentifier et autoriser les requêtes API
Les projets Firebase prennent en charge les comptes de service Google, que vous pouvez utiliser pour appeler les API du serveur Firebase à partir de votre serveur d'applications ou d'un environnement approuvé. Si vous développez du code localement ou déployez votre application sur site, vous pouvez utiliser les informations d'identification obtenues via ce compte de service pour autoriser les requêtes du serveur.
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, ouvrez Paramètres > Comptes de service .
Cliquez sur Générer une nouvelle clé privée , puis confirmez en cliquant sur Générer une clé .
Stockez en toute sécurité le fichier JSON contenant la clé.
Utilisez vos informations d'identification Firebase avec la bibliothèque d'authentification Google pour votre langue préférée pour récupérer un jeton d'accès OAuth 2.0 de courte durée :
noeud.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, ou JWT. Pour plus d'informations, 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(); }
Après l'expiration de votre jeton d'accès, la méthode d'actualisation du jeton est appelée automatiquement pour récupérer un jeton d'accès mis à jour.
Étape 2 : Assurez-vous que votre projet dispose d'un site d'hébergement par défaut
Avant votre premier déploiement sur Firebase Hosting, votre projet Firebase doit avoir un Hosting SITE
par défaut.
Vérifiez si votre projet dispose déjà d'un site d'hébergement par défaut en appelant le point de terminaison
sites.list
.Par exemple:
commande cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites
Requê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 a
"type": "DEFAULT_SITE"
, alors votre projet dispose déjà d'un site d'hébergement par défaut. Ignorez le reste de cette étape et passez à l'étape suivante : créez une nouvelle version pour votre site .Si vous obtenez un tableau vide, cela signifie que vous n'avez pas de site d'hébergement par défaut. Terminez le reste de cette étape.
Choisissez le
SITE_ID
pour votre site d'hébergement par défaut. Gardez les éléments suivants à l'esprit lorsque vous décidez de ceSITE_ID
:Ce
SITE_ID
est utilisé pour créer vos sous-domaines Firebase par défaut :SITE_ID .web.app
etSITE_ID .firebaseapp.com
.Un
SITE_ID
a les exigences suivantes :- Il doit s'agir d'une étiquette de nom d'hôte valide, ce qui signifie qu'elle ne peut pas contenir
.
,_
, etc. - Doit contenir 30 caractères ou moins
- Doit être unique au monde dans Firebase
- Il doit s'agir d'une étiquette de nom d'hôte valide, ce qui signifie qu'elle ne peut pas contenir
Notez que nous recommandons souvent d'utiliser votre ID de projet comme
SITE_ID
pour votre site d'hébergement par défaut. Découvrez comment trouver cet ID dans Comprendre les projets Firebase .Créez votre site d'hébergement par défaut en appelant le point de terminaison
sites.create
en utilisant votreSITE_ID
souhaité comme paramètresiteId
.Par 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_ID
Requê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.create
renvoie le JSON suivant :{ "name": "projects/PROJECT_ID/sites/SITE_ID", "defaultUrl": "https://SITE_ID.web.app", "type": "DEFAULT_SITE" }
Étape 3 : Créez une nouvelle version pour votre site
Votre premier appel API consiste à créer une nouvelle Version
pour votre site. Plus loin dans ce guide, vous téléchargerez des fichiers vers cette version, puis vous les déploierez sur votre site.
Déterminez le SITE_ID du site sur lequel vous souhaitez déployer.
Appelez le point de terminaison versions.create en utilisant votre SITE_ID dans l'appel.
(Facultatif) Vous pouvez également transmettre un objet de configuration Firebase Hosting dans l'appel, notamment en définissant un en-tête qui met en cache tous les fichiers pendant une durée spécifiée.
Par 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/versions
Requê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 référencer cette version spécifique.
Étape 4 : Spécifiez la liste des fichiers que vous souhaitez déployer
Maintenant que vous disposez de votre nouvel identifiant de version, vous devez indiquer à Firebase Hosting quels fichiers vous souhaitez éventuellement déployer dans cette nouvelle version.
Notez que l'hébergement a une limite de taille maximale de 2 Go pour les fichiers individuels.
Cette API nécessite que vous identifiiez les fichiers par un hachage SHA256. Ainsi, avant de pouvoir effectuer l'appel API, vous devez d'abord calculer un hachage pour chaque fichier statique en compressant les fichiers, puis en prenant le hachage SHA256 de chaque fichier nouvellement compressé.
Poursuivant notre exemple, disons que vous souhaitez déployer trois fichiers dans la nouvelle version : file1
, file2
et file3
.
Gzippez les fichiers :
gzip file1 && gzip file2 && gzip file3
Vous disposez maintenant de trois fichiers compressés
file1.gz
,file2.gz
etfile3.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 point de terminaison
versions.populateFiles
. Répertoriez chaque hachage selon le chemin souhaité pour le fichier téléchargé (dans cet exemple,/file1
,/file2
et/file3
).Par 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:populateFiles
Requê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 comprend :
Le hachage de chaque fichier qui doit être téléchargé. Par exemple, dans cet exemple,
file1
avait déjà été téléchargé dans une version précédente, son hachage n'est donc pas inclus dans la listeuploadRequiredHashes
.L'
uploadUrl
spécifique à la nouvelle version.
À l'étape suivante pour télécharger les deux nouveaux fichiers, vous aurez besoin des hachages et de l' uploadURL
de la réponse versions.populateFiles
.
Étape 5 : Téléchargez les fichiers requis
Vous devez télécharger individuellement chaque fichier requis (les fichiers répertoriés dans uploadRequiredHashes
de la réponse versions.populateFiles
à l'étape précédente). Pour ces téléchargements 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 à
uploadUrl
pour 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
.Téléchargez tous les fichiers requis un par un (dans cet exemple, uniquement
file2.gz
etfile3.gz
) vers l'URL spécifique au fichier à l'aide d'une série de requêtes.Par exemple, pour télécharger le
file2.gz
compressé2.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_HASH
Requê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 téléchargements réussis renvoient une réponse HTTPS 200 OK
.
Étape 6 : Mettre à jour le statut de la version sur FINALISE
Après avoir téléchargé tous les fichiers répertoriés dans la réponse versions.populateFiles
, vous pouvez mettre à jour le statut de votre version sur FINALIZED
.
Appelez le point de terminaison versions.patch
avec le champ status
dans votre requête API défini sur FINALIZED
.
Par 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 une Release
de votre version contenant la configuration d'hébergement et tous les fichiers de contenu de votre nouvelle version.
Appelez le point de terminaison releases.create
pour créer votre version.
Par 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 en utilisant les URL :
-
https:// SITE_ID .web.app/file1
-
https:// SITE_ID .web.app/file2
-
https:// SITE_ID .web.app/file3
Ces fichiers sont également accessibles sur les URL associées à votre domaine SITE_ID .firebaseapp.com
.
Vous pouvez également voir votre nouvelle version répertoriée dans le tableau de bord d'hébergement de la console Firebase.