Firebase Hosting REST API, Firebase'de barındırılan sitelerinize programatik ve özelleştirilebilir dağıtımlar yapmanızı sağlar. Yeni veya güncellenmiş Hosting içerik ve yapılandırmayı dağıtmak için bu REST API'yi kullanın.
Dağıtımlar için Firebase CLI'yı kullanmak yerine, Firebase Hosting REST API'yi kullanarak siteniz için programatik olarak yeni bir version
öğe oluşturabilir, dosyaları sürüme yükleyebilir ve ardından sürümü sitenize dağıtabilirsiniz.
Örneğin, Firebase Hosting REST API ile şunları yapabilirsiniz:
Dağıtımları planlayın. REST API'yi bir cron işiyle birlikte kullanarak Firebase'de barındırılan içeriği düzenli olarak değiştirebilirsiniz (örneğin, içeriğinizin özel bir tatil veya etkinlikle ilgili sürümünü dağıtmak için).
Geliştirici araçlarıyla entegrasyon Aracınızda, web uygulaması projelerinizi tek bir tıklamayla Firebase Hosting'ya dağıtma seçeneği oluşturabilirsiniz (örneğin, bir IDE'de dağıt düğmesini tıklama).
Statik içerik oluşturulduğunda dağıtımları otomatikleştirin. Bir süreç statik içeriği programatik olarak oluşturduğunda (örneğin, kullanıcı tarafından oluşturulan içerik, wiki veya haber makalesi gibi) oluşturulan içeriği dinamik olarak sunmak yerine statik dosyalar olarak dağıtabilirsiniz. Bu sayede, pahalı işlem gücünden tasarruf edebilir ve dosyalarınızı daha ölçeklenebilir bir şekilde sunabilirsiniz.
Bu kılavuzda öncelikle API'nin nasıl etkinleştirileceği, kimliğinin nasıl doğrulanacağı ve nasıl yetkilendirileceği açıklanmaktadır. Ardından, bu kılavuzda Firebase Hosting sürüm oluşturma, gerekli dosyaları sürüme yükleme ve son olarak sürümü dağıtma ile ilgili bir örnek açıklanmaktadır.
Bu REST API hakkında daha fazla bilgiyi tam Hosting REST API referans belgelerinde bulabilirsiniz.
Başlamadan önce: REST API'yi etkinleştirme
Google API Konsolu'nda Firebase Hosting REST API'yi etkinleştirmeniz gerekir:
Google API Konsolu'nda Firebase Hosting API sayfasını açın.
İstendiğinde Firebase projenizi seçin.
Firebase Hosting API sayfasında Etkinleştir'i tıklayın.
1. adım: API isteklerini kimlik doğrulamak ve yetkilendirmek için erişim jetonu alın
Firebase projeleri, uygulamanızın sunucusundan veya güvenilir ortamdan Firebase sunucu API'lerini çağırmak için kullanabileceğiniz Google hizmet hesaplarını destekler. Kodu yerel olarak geliştiriyorsanız veya uygulamanızı şirket içinde dağıtıyorsanız sunucu isteklerini yetkilendirmek için bu hizmet hesabı üzerinden alınan kimlik bilgilerini kullanabilirsiniz.
Bir hizmet hesabının kimliğini doğrulamak ve Firebase hizmetlerine erişmesi için yetkilendirmek üzere JSON biçiminde bir özel anahtar dosyası oluşturmanız gerekir.
Hizmet hesabınız için özel anahtar dosyası oluşturmak üzere:
Firebase konsolunda Ayarlar > Hizmet Hesapları'nı açın.
Yeni Özel Anahtar Oluştur'u tıklayın, ardından Anahtar Oluştur'u tıklayarak onaylayın.
Anahtarı içeren JSON dosyasını güvenli bir şekilde saklayın.
Kısa ömürlü bir OAuth 2.0 erişim jetonu almak için Firebase kimlik bilgilerinizi tercih ettiğiniz dildeki Google Auth Kitaplığı ile birlikte kullanın:
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); }); }); }
Bu örnekte, Google API istemci kitaplığı isteği bir JSON web jetonu (JWT) ile doğrular. Daha fazla bilgi için JSON web jetonları konusuna bakın.
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(); }
Erişim jetonunuzun süresi dolduktan sonra, güncellenmiş bir erişim jetonu almak için jeton yenileme yöntemi otomatik olarak çağrılır.
2. adım: Projenizde varsayılan bir Hosting sitesi olduğundan emin olun
Firebase Hosting'ya ilk dağıtımınızı yapmadan önce Firebase projenizde varsayılan bir Hosting SITE
olmalıdır.
sites.list
uç noktasını çağırarak projenizde varsayılan bir Hosting sitesi olup olmadığını kontrol edin.Örneğin:
cURL komutu
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites
İşlenmemiş HTTPS isteği
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
Sitelerden birinde
"type": "DEFAULT_SITE"
varsa projenizde varsayılan bir Hosting sitesi zaten vardır. Bu adımın geri kalanını atlayıp bir sonraki adıma geçin: Siteniz için yeni bir sürüm oluşturun.Boş bir dizi alırsanız varsayılan bir Hosting siteniz yoktur. Bu adımın geri kalanını tamamlayın.
Varsayılan
SITE_ID
siteniz için Hosting karar verin. Bu kararı verirken aşağıdakileri göz önünde bulundurunSITE_ID
:Bu
SITE_ID
, varsayılan Firebase alt alan adlarınızı oluşturmak için kullanılır:
veSITE_ID.web.app
.SITE_ID.firebaseapp.com
SITE_ID
için aşağıdaki şartlar geçerlidir:- Geçerli bir ana makine adı etiketi olmalıdır. Bu nedenle
.
,_
vb. karakterler içeremez. - En fazla 30 karakter olmalıdır
- Firebase'de global olarak benzersiz olmalıdır.
- Geçerli bir ana makine adı etiketi olmalıdır. Bu nedenle
Varsayılan Hosting siteniz için
SITE_ID
olarak proje kimliğinizi kullanmanızı genellikle önerdiğimizi hatırlatmak isteriz. Bu kimliği nasıl bulacağınızı öğrenmek için Firebase projelerini anlama başlıklı makaleyi inceleyin.İstediğiniz
SITE_ID
değerinisiteId
parametresi olarak kullanaraksites.create
uç noktasını çağırarak varsayılan Hosting sitenizi oluşturun.Örneğin:
cURL komutu
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID
İşlenmemiş HTTPS isteği
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
sites.create
için yapılan bu API çağrısı aşağıdaki JSON'u döndürür:{ "name": "projects/PROJECT_ID/sites/SITE_ID", "defaultUrl": "https://SITE_ID.web.app", "type": "DEFAULT_SITE" }
3. adım: Siteniz için yeni bir sürüm oluşturun
İlk API çağrınız, siteniz için yeni bir Version
oluşturmaktır.
Bu kılavuzun ilerleyen bölümlerinde, bu sürüme dosya yükleyip sitenize dağıtacaksınız.
Dağıtım yapmak istediğiniz site için SITE_ID belirleyin.
Aramada SITE_ID kullanarak versions.create uç noktasını arayın.
(İsteğe bağlı) Belirli bir süre boyunca tüm dosyaları önbelleğe alan bir üstbilgi ayarlama da dahil olmak üzere, çağrıda bir Firebase Hosting yapılandırma nesnesi de iletebilirsiniz.
Örneğin:
cURL komutu
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
İşlenmemiş HTTPS isteği
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" } }] } }
versions.create
için yapılan bu API çağrısı aşağıdaki JSON'u döndürür:
{ "name": "sites/SITE_ID/versions/VERSION_ID", "status": "CREATED", "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }
Bu yanıtta, yeni sürümün benzersiz tanımlayıcısı şu biçimde yer alır:
sites/SITE_ID/versions/VERSION_ID
. Bu kılavuzda, söz konusu sürümden bahsederken bu benzersiz tanımlayıcıyı kullanmanız gerekir.
4. adım: Dağıtmak istediğiniz dosyaların listesini belirtin
Yeni sürüm tanımlayıcınızı aldığınıza göre, hangi dosyaları bu yeni sürümde dağıtmak istediğinizi Firebase Hosting söylemeniz gerekir.
Hosting'da tek tek dosyalar için maksimum boyut sınırının 2 GB olduğunu unutmayın.
Bu API, dosyaları SHA256 karmasıyla tanımlamanızı gerektirir. Bu nedenle, API çağrısı yapmadan önce dosyaları Gzip ile sıkıştırıp yeni sıkıştırılmış her dosyanın SHA256 karmasını alarak her statik dosyanın karmasını hesaplamanız gerekir.
Örneğimize devam edelim. Yeni sürümde file1
, file2
ve file3
olmak üzere üç dosya dağıtmak istediğinizi varsayalım.
Dosyaları Gzip ile sıkıştırın:
gzip file1 && gzip file2 && gzip file3
Artık
file1.gz
,file2.gz
vefile3.gz
olmak üzere üç sıkıştırılmış dosyanız var.Her sıkıştırılmış dosyanın SHA256 karmasını alın:
cat file1.gz | openssl dgst -sha256 66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4
cat file2.gz | openssl dgst -sha256 490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083
cat file3.gz | openssl dgst -sha256 59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315
Artık üç sıkıştırılmış dosyanın üç SHA256 karmasına sahipsiniz.
Bu üç karma değerini
versions.populateFiles
uç noktasına bir API isteğiyle gönderin. Her karmayı, yüklenen dosyanın istenen yoluna göre listeleyin (bu örnekte/file1
,/file2
ve/file3
).Örneğin:
cURL komutu
$ 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
Ham HTTPS İsteği
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" } }
versions.populateFiles
için yapılan bu API çağrısı aşağıdaki JSON'u döndürür:
{ "uploadRequiredHashes": [ "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" ], "uploadUrl": "https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files" }
Bu yanıtta şunlar yer alır:
Yüklenmesi gereken her dosyanın karması. Örneğin, bu örnekte
file1
daha önce bir sürümde yüklenmiş olduğundan karmasıuploadRequiredHashes
listesine dahil edilmemiştir.Yeni sürüme özel olan
uploadUrl
.
İki yeni dosyayı yüklemek için sonraki adımda, versions.populateFiles
yanıtındaki karma değerlere ve uploadURL
değerine ihtiyacınız olacak.
5. adım: Gerekli dosyaları yükleyin
Gerekli olan her dosyayı (önceki adımda versions.populateFiles
yanıtındaki uploadRequiredHashes
bölümünde listelenen dosyalar) ayrı ayrı yüklemeniz gerekir. Bu dosya yüklemeleri için dosya karmalarına ve önceki adımdaki uploadUrl
değerine ihtiyacınız olacaktır.
uploadUrl
öğesine eğik çizgi ve dosyanın karma değerini ekleyerek şu biçimde dosyaya özel bir URL oluşturun:https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH
.Gerekli tüm dosyaları tek tek (bu örnekte yalnızca
file2.gz
vefile3.gz
) bir dizi istek kullanarak dosyaya özel URL'ye yükleyin.Örneğin, sıkıştırılmış
file2.gz
dosyasını yüklemek için:cURL komutu
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
Ham HTTPS İsteği
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
Başarılı yüklemeler 200 OK
HTTPS yanıtı döndürür.
6. adım: Sürümün durumunu SONLANDIRILDI olarak güncelleyin
versions.populateFiles
yanıtında listelenen tüm dosyaları yükledikten sonra sürümünüzün durumunu FINALIZED
olarak güncelleyebilirsiniz.
API isteğinizdeki status
alanı FINALIZED
olarak ayarlanmış şekilde versions.patch
uç noktasını çağırın.
Örneğin:
cURL komutu
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
Ham HTTPS İsteği
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"}
versions.patch
için yapılan bu API çağrısı aşağıdaki JSON'u döndürür. status
uygulamasının FINALIZED
sürümüne güncellendiğinden emin olun.
{ "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" }
7. adım: Dağıtım için sürümü yayınlayın
Son sürümü oluşturduktan sonra dağıtım için yayınlayın. Bu adımda, sürümünüzün Release
dosyasını oluşturmanız gerekir. Bu dosya, barındırma yapılandırmasını ve yeni sürümünüzün tüm içerik dosyalarını içermelidir.
Sürümünüzü oluşturmak için releases.create
uç noktasını çağırın.
Örneğin:
cURL komutu
curl -H "Authorization: Bearer ACCESS_TOKEN" \ -X POST https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID
Ham HTTPS İsteği
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID HTTP/1.1 Authorization: Bearer ACCESS_TOKEN
releases.create
için yapılan bu API çağrısı aşağıdaki JSON'u döndürür:
{ "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" }
Yeni sürümün barındırma yapılandırması ve tüm dosyaları artık sitenize dağıtılmış olmalıdır. Dosyalarınıza şu URL'leri kullanarak erişebilirsiniz:
https://SITE_ID.web.app/file1
https://SITE_ID.web.app/file2
https://SITE_ID.web.app/file3
Bu dosyalara, SITE_ID.firebaseapp.com
alanınızla ilişkili URL'lerden de erişilebilir.
Yeni sürümünüzü Firebase konsolunun Hosting kontrol panelinde de görebilirsiniz.