Wdróż w swojej witrynie przy użyciu interfejsu Hosting REST API

Interfejs Firebase Hosting API typu REST umożliwia automatyczne i konfigurowalne wdrożenia w witrynach hostowanych przez Firebase. Użyj tego interfejsu API typu REST, aby wdrożyć nowe lub zaktualizowane treści w Hostingu oraz konfiguracji.

Jako alternatywy dla interfejsu wiersza poleceń Firebase do możesz użyć interfejsu Firebase Hosting API, aby automatycznie utwórz nowe version dla zasobów w witrynie, prześlij pliki do wersji, a następnie wdróż ją w w Twojej witrynie.

Za pomocą interfejsu Firebase Hosting API typu REST możesz na przykład:

  • Planowanie wdrożeń. Używając interfejsu API REST w połączeniu z zadaniem cron, możesz regularnie zmieniać zawartość hostowanych przez Firebase (na przykład wdrożysz specjalną wersję Twoich treści związaną ze świętami lub wydarzeniami).

  • Integracja z narzędziami dla programistów. Możesz utworzyć w narzędziu opcję, aby: wdrażać projekty aplikacji internetowych w Hostingu Firebase jednym kliknięciem (na przykład (na przykład przez kliknięcie przycisku wdrażania w IDE).

  • Automatyzacja wdrażania po wygenerowaniu treści statycznych. Kiedy proces automatycznie generuje treści statyczne (np. treści użytkowników); takich jak strona wiki lub artykuł z wiadomościami), możesz wdrożyć wygenerowane treści jako statyczne, a nie dynamiczne. To oszczędność w mocy obliczeniowej i udostępnia pliki w bardziej skalowalny sposób.

Ten przewodnik zawiera najpierw informacje o tym, jak włączyć, uwierzytelnić i autoryzować interfejs API. W tym przewodniku przedstawimy przykład tworzenia Hostingu Firebase. przesyłać do niej wymagane pliki, a na koniec wdrożyć wersji.

Więcej informacji o tym interfejsie API typu REST znajdziesz w pełna dokumentacja Hostingu API typu REST.

Zanim zaczniesz: włącz interfejs API REST

Musisz włączyć interfejs Firebase Hosting API typu REST w konsoli interfejsów API Google:

  1. Otwórz aplikację Strona interfejsu Firebase Hosting API w konsoli interfejsów API Google.

  2. Gdy pojawi się odpowiedni komunikat, wybierz projekt Firebase.

  3. Na stronie Firebase Hosting API kliknij Włącz.

Krok 1. Uzyskaj token dostępu, aby uwierzytelnić i autoryzować żądania do interfejsu API

Projekty Firebase obsługują Google kont usługi, które można wykorzystać do wywołania Firebase interfejsy API serwera z serwera aplikacji lub zaufanego środowiska. Jeśli tworzysz lokalnie lub lokalnie wdrażając aplikację, możesz korzystać z uzyskanych danych logowania za pośrednictwem tego konta usługi, aby autoryzować żądania serwera.

Uwierzytelnienie i autoryzacja konta usługi aby uzyskać dostęp do usług Firebase, musisz wygenerować plik klucza prywatnego w formacie JSON .

Aby wygenerować plik klucza prywatnego dla konta usługi:

  1. W konsoli Firebase otwórz Ustawienia > Konta usługi.

  2. Kliknij Wygeneruj nowy klucz prywatny, a następnie potwierdź, klikając Wygeneruj klucz.

  3. Bezpiecznie przechowuj plik JSON zawierający klucz.

Używaj danych logowania Firebase w połączeniu z: Biblioteka uwierzytelniania Google wybierz preferowany język, aby pobrać token dostępu OAuth 2.0 o ograniczonym czasie ważności:

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);
    });
  });
}

W tym przykładzie biblioteka klienta interfejsu API Google uwierzytelnia żądanie za pomocą token sieciowy JSON, czyli JWT. Więcej informacji: Tokeny sieciowe JSON.

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();
}

Po wygaśnięciu tokena dostępu wywoływana jest metoda odświeżania tokena automatycznie pobierze zaktualizowany token dostępu.

Krok 2. Sprawdź, czy Twój projekt ma domyślną witrynę w Hostingu

Przed pierwszym wdrożeniem w Hostingu Firebase projekt Firebase musi mają wartość domyślną Hosting SITE.

  1. Sprawdź, czy Twój projekt ma już domyślną witrynę Hostingu, wywołując metodę sites.list punktu końcowego.

    Przykład:

    Polecenie cURL

    curl -H "Content-Type: application/json" \
           -H "Authorization: Bearer ACCESS_TOKEN" \
    
    https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites
    

    Nieprzetworzone żądanie HTTPS

    Host: firebasehosting.googleapis.com
    
    POST /v1beta1/projects/PROJECT_ID/sites HTTP/1.1
    Authorization: Bearer ACCESS_TOKEN
    Content-Type: application/json
    
    • Jeśli jedna z witryn ma zasób "type": "DEFAULT_SITE", Twój projekt ma już domyślną witrynę Hostingu. Pozostałą część tego kroku możesz pominąć. i przejdź do następnego kroku: Utwórz nową wersję swojej witryny.

    • Jeśli otrzymasz pustą tablicę, nie masz domyślnego Hostingu witrynie. Wykonaj resztę tego kroku.

  2. Wybierz SITE_ID dla domyślnej witryny w Hostingu. Zachowaj pamiętaj o tych kwestiach (SITE_ID):

    • Ten obiekt typu SITE_ID służy do tworzenia domyślnych subdomen Firebase:
      SITE_ID.web.app i SITE_ID.firebaseapp.com.

    • W przypadku elementu SITE_ID obowiązują te wymagania:

      • Musi być prawidłową etykietą nazwy hosta, co oznacza, że nie może zawierać ., _ itp.
      • Może mieć nie więcej niż 30 znaków
      • Musi być globalnie unikalne w obrębie Firebase

    Pamiętaj, że często zalecamy użycie identyfikatora projektu jako elementu SITE_ID domyślną witryną w Hostingu. Dowiedz się, jak znaleźć ten identyfikator w: Zapoznaj się z informacjami o projektach Firebase.

  3. Utwórz domyślną witrynę w Hostingu, wywołując metodę sites.create za pomocą wybranego parametru SITE_ID jako siteId.

    Przykład:

    Polecenie cURL

    curl -H "Content-Type: application/json" \
           -H "Authorization: Bearer ACCESS_TOKEN" \
    
    https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID
    

    Nieprzetworzone żądanie HTTPS

    Host: firebasehosting.googleapis.com
    
    POST /v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID
    Authorization: Bearer ACCESS_TOKEN
    Content-Type: application/json
    

    To wywołanie interfejsu API metody sites.create zwraca następujący kod JSON:

    {
      "name": "projects/PROJECT_ID/sites/SITE_ID",
      "defaultUrl": "https://SITE_ID.web.app",
      "type": "DEFAULT_SITE"
    }
    

Krok 3. Utwórz nową wersję witryny

Pierwszym wywołaniem interfejsu API jest utworzenie nowego Version. W dalszej części tego przewodnika prześlesz pliki do tej wersji, a następnie wdrożysz je w witrynie.

  1. Określ SITE_ID dla witryny, w której chcesz wdrożyć konfigurację.

  2. Wywołaj funkcję versions.create za pomocą pola SITE_ID w wywołaniu.

    (Opcjonalnie) Możesz też przesłać Obiekt konfiguracyjny Hostingu Firebase w wywołaniu, m.in. przez ustawienie nagłówka zapisującego w pamięci podręcznej wszystkie pliki długości czasu.

    Przykład:

    Polecenie cURL

    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
    

    Nieprzetworzone żądanie HTTPS

    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"
          }
        }]
      }
    }
    

To wywołanie interfejsu API metody versions.create zwraca następujący kod JSON:

{
  "name": "sites/SITE_ID/versions/VERSION_ID",
  "status": "CREATED",
  "config": {
    "headers": [{
      "glob": "**",
      "headers": {
        "Cache-Control": "max-age=1800"
      }
    }]
  }
}

Odpowiedź zawiera unikalny identyfikator nowej wersji w formacie: sites/SITE_ID/versions/VERSION_ID Zapoznasz się unikalny identyfikator w całym przewodniku, aby się odwoływać wersji.

Krok 4. Określ listę plików, które chcesz wdrożyć

Teraz, gdy masz już nowy identyfikator wersji, musisz określić, Hosting Firebase, które pliki chcesz wdrożyć w nowym wersji.

Pamiętaj, że w Hostingu obowiązuje limit rozmiaru wynoszący 2 GB poszczególnych plików.

Ten interfejs API wymaga identyfikowania plików za pomocą skrótu SHA256. Zanim zaczniesz za pomocą wywołania interfejsu API, musisz najpierw obliczyć hasz dla każdego pliku statycznego przez Spakuj pliki algorytmem gzip, a następnie pobierz hasz SHA256 każdego nowo skompresowanego pliku.

Kontynuując nasz przykład, załóżmy, że chcesz wdrożyć 3 pliki w nowej wersja: file1, file2 i file3.

  1. Spakuj pliki algorytmem gzip:

    gzip file1 && gzip file2 && gzip file3

    Masz teraz 3 skompresowane pliki file1.gz, file2.gz i file3.gz.

  2. Wygeneruj hasz SHA256 każdego skompresowanego pliku:

    cat file1.gz | openssl dgst -sha256
    
    66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4
    
    cat file2.gz | openssl dgst -sha256
    
    490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083
    
    cat file3.gz | openssl dgst -sha256
    
    59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315
    

    Masz teraz 3 hasze SHA256 trzech skompresowanych plików.

  3. Wyślij te 3 hasze w żądaniu interfejsu API do funkcji versions.populateFiles punktu końcowego. Wpisz każdy hasz według żądanej ścieżki przesłanego pliku (w tym przypadku np. /file1, /file2 i /file3).

    Przykład:

    Polecenie cURL

    $ 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
    

    Nieprzetworzone żądanie HTTPS

    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"
      }
    }
    

To wywołanie interfejsu API metody versions.populateFiles zwraca następujący kod JSON:

{
  "uploadRequiredHashes": [
    "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083",
    "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315"
  ],
  "uploadUrl": "https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files"
}

Ta odpowiedź zawiera:

  • Hash każdego pliku, który ma zostać przesłany. Na przykład w tym przykład file1 został już przesłany w poprzedniej wersji, więc jego hasz nie ma na liście uploadRequiredHashes.

  • Wartość uploadUrl, która odnosi się tylko do nowej wersji.

W następnym kroku, by przesłać 2 nowe pliki, potrzebujesz haszy i tagu uploadURL z odpowiedzi versions.populateFiles.

Krok 5. Prześlij wymagane pliki

Musisz przesłać osobno każdy wymagany plik (takie pliki są wymienione w uploadRequiredHashes z odpowiedzi versions.populateFiles w poprzedni krok). W przypadku przesyłania takich plików potrzebujesz haszy plików oraz uploadUrl z poprzedniego kroku.

  1. Do elementu uploadUrl dołącz ukośnik i szyfr pliku. utwórz adres URL dla konkretnego pliku w formacie: https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH

  2. Prześlij wszystkie wymagane pliki jeden po drugim (w tym przykładzie tylko file2.gz i file3.gz) na adres URL konkretnego pliku za pomocą serii żądań.

    Aby na przykład przesłać skompresowany plik file2.gz:

    Polecenie cURL

    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
    

    Nieprzetworzone żądanie HTTPS

    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
    

Przesyłanie zakończone powodzeniem zwraca odpowiedź HTTPS 200 OK.

Krok 6. Zaktualizuj stan wersji na „FINALIZED”

Gdy prześlesz wszystkie pliki wymienione w versions.populateFiles, możesz zaktualizować stan wersji do FINALIZED

Zadzwoń pod numer versions.patch punktu końcowego z polem status w żądaniu interfejsu API ustawionym na FINALIZED.

Przykład:

Polecenie cURL

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

Nieprzetworzone żądanie HTTPS

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"}

To wywołanie interfejsu API metody versions.patch zwraca następujący kod JSON. Sprawdź, czy Aplikacja status została uaktualniona do wersji FINALIZED.

{
  "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"
}

Krok 7. Opublikuj wersję na potrzeby wdrożenia

Masz już ostateczną wersję, a następnie opublikuj ją w celu wdrożenia. Na tym etapie musisz utworzyć Release Twojej wersji , która zawiera konfigurację hostingu i wszystkie pliki z treścią nowego pliku wersji.

Zadzwoń pod numer releases.create punktu końcowego, aby utworzyć wersję.

Przykład:

Polecenie cURL

curl -H "Authorization: Bearer ACCESS_TOKEN" \
       -X POST
https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID

Nieprzetworzone żądanie HTTPS

Host: firebasehosting.googleapis.com

POST /v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID HTTP/1.1
Authorization: Bearer ACCESS_TOKEN

To wywołanie interfejsu API metody releases.create zwraca następujący kod JSON:

{
  "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"
}

Konfiguracja hostingu i wszystkie pliki nowej wersji powinny wdrożonych w witrynie i możesz uzyskać dostęp do plików za pomocą tych adresów URL:

  • https://SITE_ID.web.app/file1
  • https://SITE_ID.web.app/file2
  • https://SITE_ID.web.app/file3

Pliki te są również dostępne pod adresami URL powiązanymi z SITE_ID.firebaseapp.com.

Nową wersję znajdziesz też na Panel Hostingu w konsoli Firebase.