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:
Otwórz aplikację Strona interfejsu Firebase Hosting API w konsoli interfejsów API Google.
Gdy pojawi się odpowiedni komunikat, wybierz projekt Firebase.
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:
W konsoli Firebase otwórz Ustawienia > Konta usługi.
Kliknij Wygeneruj nowy klucz prywatny, a następnie potwierdź, klikając Wygeneruj klucz.
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
.
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.
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:
iSITE_ID.web.app
.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
- Musi być prawidłową etykietą nazwy hosta, co oznacza, że nie może zawierać
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.Utwórz domyślną witrynę w Hostingu, wywołując metodę
sites.create
za pomocą wybranego parametruSITE_ID
jakositeId
.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.
Określ SITE_ID dla witryny, w której chcesz wdrożyć konfigurację.
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
.
Spakuj pliki algorytmem gzip:
gzip file1 && gzip file2 && gzip file3
Masz teraz 3 skompresowane pliki
file1.gz
,file2.gz
ifile3.gz
.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.
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ścieuploadRequiredHashes
.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.
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
Prześlij wszystkie wymagane pliki jeden po drugim (w tym przykładzie tylko
file2.gz
ifile3.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.