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
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
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" } }] } }
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" } }] } }
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
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" } }
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" }
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.
uploadURL
aus der Antwort versions.populateFiles
.
Schritt 5: Erforderliche Dateien hochladen
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
200 OK
zurück.
Schritt 6: Aktualisieren Sie den Status der Version auf FINALIZED
versions.populateFiles
aufgeführten Dateien hochgeladen haben, können Sie den Status Ihrer Version auf FINALIZED
aktualisieren.
versions.patch
auf, wobei das status
in Ihrer API-Anfrage auf FINALIZED
gesetzt ist.
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"}
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
Release
Ihrer Version erstellen, das die Hosting-Konfiguration und alle Inhaltsdateien für Ihre neue Version enthält.
releases.create
auf, um Ihr Release zu erstellen.
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
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" }
https:// SITE_ID .web.app/file1
https:// SITE_ID .web.app/file2
https:// SITE_ID .web.app/file3
SITE_ID .firebaseapp.com
Domäne verknüpft sind.