Stellen Sie es mithilfe der Hosting-REST-API auf Ihrer Website bereit

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:

  1. Öffnen Sie die Seite Firebase Hosting API in der Google APIs-Konsole.

  2. Wenn Sie dazu aufgefordert werden, wählen Sie Ihr Firebase-Projekt aus.

  3. 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:

  1. Öffnen Sie in der Firebase-Konsole Einstellungen > Dienstkonten .

  2. Klicken Sie auf „Neuen privaten Schlüssel generieren“ und bestätigen Sie dann, indem Sie auf „Schlüssel generieren“ klicken.

  3. 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.

  1. Ü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.

  2. Legen Sie die SITE_ID für Ihre Standard-Hosting-Site fest. Beachten Sie Folgendes, wenn Sie diese SITE_ID festlegen:

    • Diese SITE_ID wird zum Erstellen Ihrer Standard-Firebase-Subdomains verwendet:
      SITE_ID .web.app und SITE_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“ .

  3. Erstellen Sie Ihre Standard-Hosting-Site, indem Sie den Endpunkt sites.create aufrufen und dabei Ihre gewünschte SITE_ID als siteId 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.

  1. Bestimmen Sie die SITE_ID für die Site, auf der Sie bereitstellen möchten.

  2. 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 .

  1. Gzip die Dateien:

    gzip file1 && gzip file2 && gzip file3

    Sie haben jetzt drei komprimierte Dateien file1.gz , file2.gz und file3.gz .

  2. 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.

  3. 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 Liste uploadRequiredHashes 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.

  1. 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 .

  2. Laden Sie alle erforderlichen Dateien nacheinander (in diesem Beispiel nur file2.gz und file3.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.