Die Firebase Hosting REST API ermöglicht programmgesteuerte und anpassbare Bereitstellungen auf Ihren von Firebase gehosteten Websites. Verwenden Sie diese REST-API, um neue oder aktualisierte Hosting-Inhalte und -Konfigurationen bereitzustellen.
Alternativ zur Verwendung der Firebase-CLI für Bereitstellungen können Sie die Firebase Hosting-REST-API verwenden, um programmgesteuert eine neue version
von Assets für Ihre Site zu erstellen, Dateien in die Version hochzuladen und die Version dann auf Ihrer Site bereitzustellen.
Mit der Firebase Hosting REST API können Sie beispielsweise:
Planen Sie Bereitstellungen. Durch die Verwendung der REST-API in Verbindung mit einem Cron-Job können Sie von Firebase gehostete Inhalte regelmäßig ändern (z. B. um eine spezielle feiertags- oder ereignisbezogene Version Ihrer Inhalte bereitzustellen).
Integration mit Entwicklertools. Sie können in Ihrem Tool eine Option erstellen, um Ihre Web-App-Projekte mit nur einem Klick auf Firebase Hosting bereitzustellen (z. B. durch Klicken auf eine Bereitstellungsschaltfläche in einer IDE).
Automatisierte Bereitstellungen, wenn statische Inhalte generiert werden. Wenn ein Prozess statische Inhalte programmgesteuert generiert (z. B. benutzergenerierte Inhalte wie ein Wiki oder einen Nachrichtenartikel), können Sie die generierten Inhalte als statische Dateien bereitstellen, anstatt sie dynamisch bereitzustellen. Dadurch sparen Sie teure Rechenleistung und stellen Ihre Dateien skalierbarer bereit.
In dieser Anleitung wird zunächst beschrieben, wie Sie die API aktivieren, authentifizieren und autorisieren. Anschließend geht dieser Leitfaden durch ein Beispiel, um eine Firebase Hosting-Version zu erstellen, die erforderlichen Dateien in die Version hochzuladen und schließlich die Version bereitzustellen.
Weitere Informationen zu dieser REST-API finden Sie auch in der vollständigen Referenzdokumentation zur Hosting-REST-API .
Bevor Sie beginnen: Aktivieren Sie die REST-API
Sie müssen die Firebase Hosting REST API in der Google APIs-Konsole aktivieren:
Öffnen Sie die Seite Firebase Hosting API in der Google APIs-Konsole.
Wenn Sie dazu aufgefordert werden, wählen Sie Ihr Firebase-Projekt aus.
Klicken Sie auf der Seite Firebase Hosting API auf Aktivieren .
Schritt 1: Holen Sie sich ein Zugriffstoken zur Authentifizierung und Autorisierung von API-Anfragen
Firebase-Projekte unterstützen Google- Dienstkonten , mit denen Sie Firebase-Server-APIs von Ihrem App-Server oder Ihrer vertrauenswürdigen Umgebung aus aufrufen können. Wenn Sie Code lokal entwickeln oder Ihre Anwendung lokal bereitstellen, können Sie die über dieses Dienstkonto erhaltenen Anmeldeinformationen verwenden, um Serveranfragen zu autorisieren.
Um ein Dienstkonto zu authentifizieren und es für den Zugriff auf Firebase-Dienste zu autorisieren, müssen Sie eine private Schlüsseldatei im JSON-Format generieren.
So generieren Sie eine private Schlüsseldatei für Ihr Dienstkonto:
Öffnen Sie in der Firebase-Konsole Einstellungen > Dienstkonten .
Klicken Sie auf „Neuen privaten Schlüssel generieren“ und bestätigen Sie dann, indem Sie auf „Schlüssel generieren“ klicken.
Speichern Sie die JSON-Datei, die den Schlüssel enthält, sicher.
Verwenden Sie Ihre Firebase-Anmeldeinformationen zusammen mit der Google Auth Library für Ihre bevorzugte Sprache, um ein kurzlebiges OAuth 2.0-Zugriffstoken abzurufen:
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); }); }); }
In diesem Beispiel authentifiziert die Google API-Clientbibliothek die Anfrage mit einem JSON-Web-Token oder JWT. Weitere Informationen finden Sie unter JSON-Web-Tokens .
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(); }
Nachdem Ihr Zugriffstoken abgelaufen ist, wird die Token-Aktualisierungsmethode automatisch aufgerufen, um ein aktualisiertes Zugriffstoken abzurufen.
Schritt 2: Stellen Sie sicher, dass Ihr Projekt über eine Standard-Hosting-Site verfügt
Vor Ihrer ersten Bereitstellung bei Firebase Hosting muss Ihr Firebase-Projekt über eine Standard- Hosting- SITE
verfügen.
Überprüfen Sie, ob Ihr Projekt bereits über eine Standard-Hosting-Site verfügt, indem Sie den Endpunkt
sites.list
aufrufen.Zum Beispiel:
cURL-Befehl
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites
Rohe HTTPS-Anfrage
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
Wenn eine der Sites
"type": "DEFAULT_SITE"
hat, verfügt Ihr Projekt bereits über eine Standard-Hosting-Site. Überspringen Sie den Rest dieses Schritts und fahren Sie mit dem nächsten Schritt fort: Erstellen Sie eine neue Version für Ihre Website .Wenn Sie ein leeres Array erhalten, verfügen Sie nicht über eine Standard-Hosting-Site. Schließen Sie den Rest dieses Schritts ab.
Legen Sie die
SITE_ID
für Ihre Standard-Hosting-Site fest. Beachten Sie Folgendes, wenn Sie dieseSITE_ID
festlegen:Diese
SITE_ID
wird zum Erstellen Ihrer Standard-Firebase-Subdomains verwendet:SITE_ID .web.app
undSITE_ID .firebaseapp.com
.Für eine
SITE_ID
gelten folgende Anforderungen:- Muss eine gültige Hostnamenbezeichnung sein, d. h. sie darf nicht enthalten
.
,_
, usw. - Darf maximal 30 Zeichen lang sein
- Muss innerhalb von Firebase global eindeutig sein
- Muss eine gültige Hostnamenbezeichnung sein, d. h. sie darf nicht enthalten
Beachten Sie, dass wir häufig empfehlen, Ihre Projekt-ID als
SITE_ID
für Ihre Standard-Hosting-Site zu verwenden. Wie Sie diese ID finden, erfahren Sie im Artikel „Firebase-Projekte verstehen“ .Erstellen Sie Ihre Standard-Hosting-Site, indem Sie den Endpunkt
sites.create
aufrufen und dabei Ihre gewünschteSITE_ID
alssiteId
Parameter verwenden.Zum Beispiel:
cURL-Befehl
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID
Rohe HTTPS-Anfrage
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
Dieser API-Aufruf an
sites.create
gibt den folgenden JSON zurück:{ "name": "projects/PROJECT_ID/sites/SITE_ID", "defaultUrl": "https://SITE_ID.web.app", "type": "DEFAULT_SITE" }
Schritt 3: Erstellen Sie eine neue Version für Ihre Site
Ihr erster API-Aufruf besteht darin, eine neue Version
für Ihre Site zu erstellen. Später in diesem Handbuch laden Sie Dateien in diese Version hoch und stellen sie dann auf Ihrer Site bereit.
Bestimmen Sie die SITE_ID für die Site, auf der Sie bereitstellen möchten.
Rufen Sie den Endpunkt „versions.create“ mit Ihrer SITE_ID im Aufruf auf.
(Optional) Sie können im Aufruf auch ein Firebase Hosting-Konfigurationsobjekt übergeben, einschließlich der Festlegung eines Headers, der alle Dateien für einen bestimmten Zeitraum zwischenspeichert.
Zum Beispiel:
cURL-Befehl
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
Rohe HTTPS-Anfrage
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" } }] } }
Dieser API-Aufruf an versions.create
gibt den folgenden JSON zurück:
{ "name": "sites/SITE_ID/versions/VERSION_ID", "status": "CREATED", "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }
Diese Antwort enthält eine eindeutige Kennung für die neue Version im Format: sites/ SITE_ID /versions/ VERSION_ID
. Sie benötigen diese eindeutige Kennung in diesem Handbuch, um auf diese bestimmte Version zu verweisen.
Schritt 4: Geben Sie die Liste der Dateien an, die Sie bereitstellen möchten
Nachdem Sie nun Ihre neue Versionskennung haben, müssen Sie Firebase Hosting mitteilen, welche Dateien Sie letztendlich in dieser neuen Version bereitstellen möchten.
Beachten Sie, dass beim Hosting eine maximale Größenbeschränkung von 2 GB für einzelne Dateien gilt.
Diese API erfordert, dass Sie Dateien anhand eines SHA256-Hashs identifizieren. Bevor Sie also den API-Aufruf durchführen können, müssen Sie zunächst einen Hash für jede statische Datei berechnen, indem Sie die Dateien per Gzip komprimieren und dann den SHA256-Hash jeder neu komprimierten Datei verwenden.
Um unser Beispiel fortzusetzen, nehmen wir an, dass Sie drei Dateien in der neuen Version bereitstellen möchten: file1
, file2
und file3
.
Gzip die Dateien:
gzip file1 && gzip file2 && gzip file3
Sie haben jetzt drei komprimierte Dateien
file1.gz
,file2.gz
undfile3.gz
.Rufen Sie den SHA256-Hash jeder komprimierten Datei ab:
cat file1.gz | openssl dgst -sha256 66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4
cat file2.gz | openssl dgst -sha256 490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083
cat file3.gz | openssl dgst -sha256 59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315
Sie haben jetzt die drei SHA256-Hashes der drei komprimierten Dateien.
Senden Sie diese drei Hashes in einer API-Anfrage an den Endpunkt
versions.populateFiles
. Listen Sie jeden Hash nach dem gewünschten Pfad für die hochgeladene Datei auf (in diesem Beispiel/file1
,/file2
und/file3
).Zum Beispiel:
cURL-Befehl
$ 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
Rohe HTTPS-Anfrage
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" } }
Dieser API-Aufruf an versions.populateFiles
gibt den folgenden JSON zurück:
{ "uploadRequiredHashes": [ "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" ], "uploadUrl": "https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files" }
Diese Antwort beinhaltet:
Der Hash jeder Datei , die hochgeladen werden muss. In diesem Beispiel wurde beispielsweise
file1
bereits in einer früheren Version hochgeladen, sodass ihr Hash nicht in der ListeuploadRequiredHashes
enthalten ist.Die
uploadUrl
, die spezifisch für die neue Version ist.
Im nächsten Schritt zum Hochladen der beiden neuen Dateien benötigen Sie die Hashes und die uploadURL
aus der Antwort versions.populateFiles
.
Schritt 5: Erforderliche Dateien hochladen
Sie müssen jede erforderliche Datei einzeln hochladen (die Dateien, die in uploadRequiredHashes
aus der Antwort versions.populateFiles
im vorherigen Schritt aufgeführt sind). Für diese Datei-Uploads benötigen Sie die Datei-Hashes und die uploadUrl
aus dem vorherigen Schritt.
Hängen Sie einen Schrägstrich und den Hash der Datei an die
uploadUrl
an, um eine dateispezifische URL im Format zu erstellen:https://upload-firebasehosting.googleapis.com/upload/sites/ SITE_ID /versions/ VERSION_ID /files/ FILE_HASH
.Laden Sie alle erforderlichen Dateien nacheinander (in diesem Beispiel nur
file2.gz
undfile3.gz
) mithilfe einer Reihe von Anforderungen auf die dateispezifische URL hoch.Um beispielsweise die komprimierte
file2.gz
hochzuladen:cURL-Befehl
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
Rohe HTTPS-Anfrage
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
Erfolgreiche Uploads geben eine HTTPS-Antwort 200 OK
zurück.
Schritt 6: Aktualisieren Sie den Status der Version auf FINALIZED
Nachdem Sie alle in der Antwort versions.populateFiles
aufgeführten Dateien hochgeladen haben, können Sie den Status Ihrer Version auf FINALIZED
aktualisieren.
Rufen Sie den Endpunkt versions.patch
auf, wobei das status
in Ihrer API-Anfrage auf FINALIZED
gesetzt ist.
Zum Beispiel:
cURL-Befehl
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
Rohe HTTPS-Anfrage
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"}
Dieser API-Aufruf an versions.patch
gibt den folgenden JSON zurück. Überprüfen Sie, ob der status
auf FINALIZED
aktualisiert wurde.
{ "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" }
Schritt 7: Geben Sie die Version für die Bereitstellung frei
Nachdem Sie nun über eine finalisierte Version verfügen, geben Sie sie zur Bereitstellung frei. Für diesen Schritt müssen Sie ein Release
Ihrer Version erstellen, das die Hosting-Konfiguration und alle Inhaltsdateien für Ihre neue Version enthält.
Rufen Sie den Endpunkt releases.create
auf, um Ihr Release zu erstellen.
Zum Beispiel:
cURL-Befehl
curl -H "Authorization: Bearer ACCESS_TOKEN" \ -X POST https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID
Rohe HTTPS-Anfrage
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID HTTP/1.1 Authorization: Bearer ACCESS_TOKEN
Dieser API-Aufruf an releases.create
gibt den folgenden JSON zurück:
{ "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" }
Die Hosting-Konfiguration und alle Dateien für die neue Version sollten nun auf Ihrer Site bereitgestellt werden und Sie können über die URLs auf Ihre Dateien zugreifen:
-
https:// SITE_ID .web.app/file1
-
https:// SITE_ID .web.app/file2
-
https:// SITE_ID .web.app/file3
Auf diese Dateien kann auch über URLs zugegriffen werden, die mit Ihrer SITE_ID .firebaseapp.com
Domäne verknüpft sind.
Sie können Ihre neue Version auch im Hosting-Dashboard der Firebase-Konsole aufgelistet sehen.