Mit der Firebase Hosting REST API können Sie Ihre auf Firebase gehosteten Websites programmatisch und individuell bereitstellen. Mit dieser REST API können Sie neue oder aktualisierte Hosting-Inhalte und ‑Konfigurationen bereitstellen.
Alternativ zur Verwendung der Firebase-CLI für die Bereitstellung 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 Cron-Job verwenden, können Sie in regelmäßigen Abständen Änderungen an in Firebase gehosteten Inhalten vornehmen, 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 Ihre Webanwendungsprojekte mit nur einem Klick in Firebase Hosting bereitgestellt werden können, z. B. durch Klicken auf eine Schaltfläche „Bereitstellen“ in einer IDE.
Bereitstellungen automatisieren, wenn statische Inhalte generiert werden: Wenn ein Prozess statische Inhalte programmatisch generiert (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 zu rendern. So sparen Sie teure Rechenleistung und können Ihre Dateien besser skalieren.
In diesem Leitfaden wird zuerst beschrieben, wie Sie die API aktivieren, authentifizieren und autorisieren. In dieser Anleitung wird anhand eines Beispiels beschrieben, wie Sie eine Firebase Hosting-Version erstellen, die erforderlichen Dateien in die Version hochladen und die Version schließlich bereitstellen.
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 in der Google APIs Console die Seite Firebase Hosting API.
Wählen Sie bei Aufforderung Ihr Firebase-Projekt aus.
Klicken Sie auf der Seite der Firebase Hosting API 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 Anmeldedaten verwenden, die über dieses Dienstkonto abgerufen wurden, um Serveranfragen zu autorisieren.
Um ein Dienstkonto zu authentifizieren und ihm den Zugriff auf Firebase-Dienste zu gewähren, müssen Sie eine Datei mit dem privaten Schlüssel im JSON-Format generieren.
So erstellen Sie eine Datei mit einem privaten Schlüssel für Ihr Dienstkonto:
Öffnen Sie in der Firebase-Konsole Einstellungen > Dienstkonten.
Klicken Sie auf Neuen privaten Schlüssel generieren und bestätigen Sie die Aktion mit einem Klick auf 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-Bibliothek 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 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(); }
Nach Ablauf des Zugriffstokens wird die Methode zum Aktualisieren des Tokens automatisch aufgerufen, um ein aktualisiertes Zugriffstoken abzurufen.
Schritt 2: Prüfen, ob Ihr Projekt eine Standardwebsite vom Typ Hosting hat
Vor der ersten Bereitstellung in Firebase Hosting muss in Ihrem Firebase-Projekt ein Standard-Hosting SITE
vorhanden sein.
Prüfen Sie, ob Ihr Projekt bereits eine Standardwebsite für Hosting hat, indem Sie den Endpunkt
sites.list
aufrufen.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 Websites
"type": "DEFAULT_SITE"
hat, verfügt Ihr Projekt bereits über eine Standardwebsite vom Typ Hosting. Überspringen Sie den Rest dieses Schritts und fahren Sie mit dem nächsten Schritt fort: Neue Version für Ihre Website erstellen.Wenn Sie ein leeres Array erhalten, haben Sie keine Standardwebsite für Hosting. Führen Sie die restlichen Schritte aus.
Legen Sie die
SITE_ID
für Ihre Standard-Hosting-Website fest. Beachten Sie bei der Entscheidung für dieseSITE_ID
Folgendes:Mit diesem
SITE_ID
werden Ihre standardmäßigen Firebase-Subdomains erstellt:
undSITE_ID.web.app
.SITE_ID.firebaseapp.com
Für ein
SITE_ID
gelten die folgenden Anforderungen:- Muss ein gültiges Hostnamenlabel sein, d. h., es darf nicht
.
,_
usw. enthalten. - Darf höchstens 30 Zeichen lang sein
- Muss in Firebase global eindeutig sein
- Muss ein gültiges Hostnamenlabel sein, d. h., es darf nicht
Wir empfehlen oft, Ihre Projekt-ID als
SITE_ID
für Ihre Standard-Hosting-Website zu verwenden. Weitere Informationen zum Ermitteln dieser IDErstellen Sie Ihre Standard-Hosting-Website, indem Sie den Endpunkt
sites.create
mit dem gewünschtenSITE_ID
alssiteId
-Parameter 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_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 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
Bei Ihrem ersten API-Aufruf erstellen Sie eine neue Version
für Ihre Website.
Später in dieser Anleitung laden Sie Dateien in diese Version hoch und stellen sie dann auf Ihrer Website bereit.
Ermitteln Sie das SITE_ID für die Website, auf der Sie die Bereitstellung vornehmen möchten.
Rufen Sie den Endpunkt versions.create mit Ihrem SITE_ID im Aufruf auf.
(Optional) Sie können im Aufruf auch ein Firebase Hosting-Konfigurationsobjekt ü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/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 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 im gesamten Leitfaden, um auf diese spezielle Version zu verweisen.
Schritt 4: Liste der Dateien angeben, die Sie bereitstellen möchten
Nachdem Sie die neue Versions-ID erhalten haben, müssen Sie Firebase Hosting mitteilen, welche Dateien Sie in dieser neuen Version bereitstellen möchten.
Beachten Sie, dass für einzelne Dateien in Hosting ein Größenlimit von 2 GB gilt.
Für diese API müssen Sie Dateien anhand eines 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.
Angenommen, Sie möchten in der neuen Version drei Dateien bereitstellen: file1
, file2
und file3
.
Gzippen Sie die Dateien:
gzip file1 && gzip file2 && gzip file3
Sie haben jetzt drei komprimierte Dateien:
file1.gz
,file2.gz
undfile3.gz
.SHA256-Hash jeder komprimierten Datei abrufen:
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
).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 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:
Der Hash jeder Datei, die hochgeladen werden muss. Im Beispiel oben wurde
file1
bereits in einer früheren Version hochgeladen. Der Hash ist daher nicht in der ListeuploadRequiredHashes
enthalten.Die
uploadUrl
, die für die neue Version spezifisch ist.
Im nächsten Schritt zum Hochladen der beiden neuen Dateien benötigen Sie die Hashes und den uploadURL
aus der versions.populateFiles
-Antwort.
Schritt 5: Erforderliche Dateien hochladen
Sie müssen jede erforderliche Datei einzeln hochladen (die Dateien, die in uploadRequiredHashes
aus der versions.populateFiles
-Antwort 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
uploadUrl
an, um eine dateispezifische URL im Formathttps://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH
zu erstellen.Laden Sie alle erforderlichen Dateien einzeln (in diesem Beispiel nur
file2.gz
undfile3.gz
) über eine Reihe von Anfragen an die dateispezifische URL hoch.So laden Sie beispielsweise die komprimierte Datei
file2.gz
hoch: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
Bei erfolgreichen Uploads wird eine 200 OK
-HTTPS-Antwort zurückgegeben.
Schritt 6: Status der Version auf FINALIZED aktualisieren
Nachdem Sie alle in der versions.populateFiles
-Antwort aufgeführten Dateien hochgeladen haben, können Sie den Status Ihrer Version auf FINALIZED
aktualisieren.
Rufen Sie den Endpunkt versions.patch
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
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 die folgende JSON-Datei 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 für die Bereitstellung freigeben
Nachdem Sie eine endgültige Version haben, können Sie sie für die Bereitstellung freigeben. Für diesen Schritt müssen Sie ein Release
Ihrer Version erstellen, das die Hostingkonfiguration und alle Inhaltsdateien für Ihre neue Version enthält.
Rufen Sie den releases.create
-Endpunkt auf, um den 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
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 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 Hostingkonfiguration und alle Dateien für die neue Version sollten jetzt auf Ihrer Website bereitgestellt werden. Sie können über die folgenden URLs auf Ihre Dateien zugreifen:
https://SITE_ID.web.app/file1
https://SITE_ID.web.app/file2
https://SITE_ID.web.app/file3
Diese Dateien sind auch über URLs zugänglich, die mit Ihrer SITE_ID.firebaseapp.com
-Domain verknüpft sind.
Ihr neues Release wird auch im Hosting-Dashboard der Firebase-Konsole aufgeführt.