Die Firebase Hosting REST API ermöglicht programmatische 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 mit der Firebase Hosting REST API programmatisch eine neue version von Assets für Ihre Website erstellen, Dateien in die Version hochladen und die Version dann auf Ihrer Website bereitstellen.
Mit der Firebase Hosting REST API haben Sie beispielsweise folgende Möglichkeiten:
Bereitstellungen planen : Wenn Sie die REST API in Verbindung mit einem Cronjob verwenden, können Sie von Firebase gehostete Inhalte regelmäßig ändern (z. B. um eine spezielle Version Ihrer Inhalte für Feiertage oder Veranstaltungen bereitzustellen).
In Entwicklertools einbinden : Sie können in Ihrem Tool eine Option erstellen, mit der Sie Ihre Webanwendungsprojekte mit nur einem Klick in Firebase Hosting bereitstellen können (z. B. durch Klicken auf eine Schaltfläche zum Bereitstellen in einer IDE).
Bereitstellungen automatisieren, wenn statische Inhalte generiert werden : Wenn durch einen Prozess programmatisch statische Inhalte generiert werden (z. B. von Nutzern erstellte Inhalte wie ein Wiki oder ein Nachrichtenartikel), können Sie die generierten Inhalte als statische Dateien bereitstellen, anstatt sie dynamisch bereitzustellen. So sparen Sie teure Rechenleistung und können Ihre Dateien besser skalieren.
In dieser Anleitung wird zuerst beschrieben, wie Sie die API aktivieren, authentifizieren und autorisieren. Anschließend wird ein Beispiel durchgegangen, in dem eine Firebase Hosting Version erstellt, die erforderlichen Dateien in die Version hochgeladen und die Version dann bereitgestellt wird.
Weitere Informationen zu dieser REST API finden Sie in der vollständigen Hosting REST API-Referenzdokumentation.
Vorbereitung: REST API aktivieren
Sie müssen die Firebase Hosting REST API in der Google APIs Console aktivieren:
Öffnen Sie die Firebase Hosting API-Seite in der Google APIs Console.
Wählen Sie Ihr Firebase-Projekt aus, wenn Sie dazu aufgefordert werden.
Klicken Sie auf der Firebase Hosting API-Seite auf Aktivieren.
Schritt 1: Zugriffstoken zum Authentifizieren und Autorisieren von API-Anfragen abrufen
Firebase-Projekte unterstützen Google-Dienstkonten, mit denen Sie Firebase-Server-APIs von Ihrem App-Server oder einer vertrauenswürdigen Umgebung aus aufrufen können. Wenn Sie Code lokal entwickeln oder Ihre Anwendung vor Ort bereitstellen, können Sie mit den Anmeldedaten, die Sie mit diesem Dienstkonto erhalten haben, Serveranfragen autorisieren.
Alle Dienstkonten für Ihr Firebase-Projekt finden Sie in den
Um ein Dienstkonto zu authentifizieren und ihm Zugriff auf Firebase-Dienste zu gewähren, müssen Sie eine Datei mit einem privaten Schlüssel im JSON-Format generieren.
So generieren Sie eine Datei mit einem privaten Schlüssel für Ihr Dienstkonto :
Rufen Sie in der Firebase Console die
Einstellungen > Dienstkonten auf dem Tab auf.Klicken Sie auf Neuen privaten Schlüssel generieren und bestätigen Sie mit Schlüssel generieren.
Speichern Sie die JSON-Datei mit dem Schlüssel an einem sicheren Ort.
Verwenden Sie Ihre Firebase-Anmeldedaten 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-Webtoken (JWT). Weitere Informationen finden Sie unter JSON-Webtokens.
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(); }
Nach Ablauf des Zugriffstokens wird die Methode zur Aktualisierung des Tokens automatisch aufgerufen, um ein aktualisiertes Zugriffstoken abzurufen.
Schritt 2: Sicherstellen, dass Ihr Projekt eine Standard-Hosting Website hat
Vor der ersten Bereitstellung in Firebase Hosting, muss Ihr Firebase-Projekt
eine Standard
Hosting SITE haben.
Prüfen Sie, ob Ihr Projekt bereits eine Standard-Hosting Website hat, indem Sie den
sites.listEndpunkt aufrufen.Beispiel:
cURL-Befehl
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sitesUnformatierte 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 Websites
"type": "DEFAULT_SITE"hat, hat Ihr Projekt bereits eine Standard-Hosting Website. Ü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, haben Sie keine Standard-Hosting Website. Führen Sie die restlichen Schritte aus.
Legen Sie die
SITE_IDfür Ihre Standard-Hosting Website fest. Beachten Sie bei der Entscheidung für dieseSITE_IDFolgendes:Mit dieser
SITE_IDwerden Ihre Standard-Firebase-Subdomains erstellt:
undSITE_ID.web.app .SITE_ID.firebaseapp.comEine
SITE_IDmuss folgende Anforderungen erfüllen:- Muss ein gültiges Hostnamenslabel sein, d. h., es darf keine Punkte (
.), Unterstriche (_) usw. enthalten. - Darf maximal 30 Zeichen lang sein.
- Muss in Firebase weltweit eindeutig sein.
- Muss ein gültiges Hostnamenslabel sein, d. h., es darf keine Punkte (
Wir empfehlen oft, Ihre Projekt-ID als die
SITE_IDfür Ihre Standard Hosting Website zu verwenden. Informationen zum Ermitteln dieser ID finden Sie unter Firebase-Projekte.Erstellen Sie Ihre Standard-Hosting Website, indem Sie den
sites.createEndpunkt mit der gewünschtenSITE_IDalssiteIdParameter aufrufen.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_IDUnformatierte 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 von
sites.creategibt das folgende JSON zurück:{ "name": "projects/PROJECT_ID/sites/SITE_ID", "defaultUrl": "https://SITE_ID.web.app", "type": "DEFAULT_SITE" }
Schritt 3: Neue Version für Ihre Website erstellen
Ihr erster API-Aufruf dient dazu, eine neue
Version für Ihre Website zu erstellen.
Später in dieser Anleitung laden Sie Dateien in diese Version hoch und stellen sie dann auf Ihrer Website bereit.
Bestimmen Sie die SITE_ID für die Website, auf der Sie bereitstellen möchten.
Rufen Sie den versions.create Endpunkt auf und verwenden Sie dabei Ihre SITE_ID.
(Optional) Sie können auch ein Firebase Hosting Konfigurationsobjekt im Aufruf übergeben, einschließlich des Festlegens eines Headers, der alle Dateien für einen bestimmten Zeitraum im Cache speichert.
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/versionsUnformatierte 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 von versions.create gibt das folgende 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 dieser Anleitung, um auf diese bestimmte Version zu verweisen.
Schritt 4: Liste der Dateien angeben, die Sie bereitstellen möchten
Nachdem Sie die Kennung für die neue Version haben, müssen Sie Firebase Hosting mitteilen, welche Dateien Sie in dieser neuen Version bereitstellen möchten.
Beachten Sie, dass für Hosting eine maximale Größe von 2 GB für einzelne Dateien gilt.
Für diese API müssen Sie Dateien mit einem SHA256-Hash identifizieren. Bevor Sie den API-Aufruf ausführen können, müssen Sie also zuerst einen Hash für jede statische Datei berechnen. Dazu müssen Sie die Dateien mit Gzip komprimieren und dann den SHA256-Hash jeder neu komprimierten Datei ermitteln.
Nehmen wir an, Sie möchten in der neuen Version drei Dateien bereitstellen: file1, file2 und file3.
Komprimieren Sie die Dateien mit Gzip:
gzip file1 && gzip file2 && gzip file3
Sie haben jetzt drei komprimierte Dateien:
file1.gz,file2.gzundfile3.gz.Ermitteln Sie den SHA256-Hash jeder komprimierten Datei:
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
versions.populateFilesEndpunkt. Listen Sie jeden Hash mit dem gewünschten Pfad für die hochgeladene Datei auf (in diesem Beispiel,/file1,/file2, und/file3).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:populateFilesUnformatierte 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 von versions.populateFiles gibt das folgende JSON zurück:
{ "uploadRequiredHashes": [ "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" ], "uploadUrl": "https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files" }
Diese Antwort enthält:
Den Hash jeder Datei , die hochgeladen werden muss. In diesem Beispiel wurde
file1bereits in einer früheren Version hochgeladen, daher ist der Hash nicht in der ListeuploadRequiredHashesenthalten.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 von versions.populateFiles.
Schritt 5: Erforderliche Dateien hochladen
Sie müssen jede erforderliche Datei einzeln hochladen (die Dateien, die in uploadRequiredHashes aus der Antwort von versions.populateFiles im vorherigen Schritt aufgeführt sind). Für diese Dateiuploads benötigen Sie die Dateihashes und die uploadUrl aus dem vorherigen Schritt.
Hängen Sie einen Schrägstrich und den Hash der Datei an die
uploadUrlan, 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 einzeln (in diesem Beispiel nur
file2.gzundfile3.gz) mit einer Reihe von Anfragen auf die dateispezifische URL hoch.Beispiel für das Hochladen der komprimierten Datei
file2.gz: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_HASHUnformatierte 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 200 OK-HTTPS-Antwort zurück.
Schritt 6: Status der Version auf FINALIZED aktualisieren
Nachdem Sie alle Dateien hochgeladen haben, die in der Antwort von versions.populateFiles aufgeführt sind, können Sie den Status Ihrer Version auf FINALIZED aktualisieren.
Rufen Sie den versions.patch
Endpunkt auf und legen Sie das Feld status in Ihrer API-Anfrage auf FINALIZED fest.
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
Unformatierte 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 von versions.patch gibt das folgende JSON zurück. Prüfen Sie, ob 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: Version zur Bereitstellung freigeben
Nachdem Sie eine endgültige Version haben, geben Sie sie zur Bereitstellung frei. Für diesen Schritt,
müssen Sie eine
Release Ihrer Version erstellen,
die die Hosting-Konfiguration und alle Inhaltsdateien für Ihre neue
Version enthält.
Rufen Sie den releases.create
Endpunkt auf, um Ihre Release zu erstellen.
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
Unformatierte 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 von releases.create gibt das folgende 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 jetzt auf Ihrer Website bereitgestellt sein. Sie können über die folgenden URLs auf Ihre Dateien zugreifen:
https://SITE_ID.web.app/file1https://SITE_ID.web.app/file2https://SITE_ID.web.app/file3
Diese Dateien sind auch über URLs zugänglich, die mit Ihrer
SITE_ID.firebaseapp.com Domain verknüpft sind.
Ihre Neuveröffentlichung wird auch im Hosting Dashboard der Firebase Console aufgeführt.