Hosting REST API'sini kullanarak sitenize dağıtın

Firebase Hosting REST API, Firebase tarafından barındırılan sitelerinize programlı ve özelleştirilebilir dağıtımlara olanak tanır. Yeni veya güncellenmiş Barındırma içeriğini ve yapılandırmasını dağıtmak için bu REST API'yi kullanın.

Dağıtımlar için Firebase CLI'yi kullanmaya alternatif olarak, siteniz için varlıkların yeni bir version programlı bir şekilde oluşturmak, dosyaları sürüme yüklemek ve ardından sürümü sitenize dağıtmak için Firebase Hosting REST API'yi kullanabilirsiniz.

Örneğin Firebase Hosting REST API ile şunları yapabilirsiniz:

  • Zamanlama dağıtımları. REST API'yi bir cron işiyle birlikte kullanarak, Firebase tarafından barındırılan içeriği düzenli aralıklarla 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 entegre edin. Aracınızda, web uygulaması projelerinizi Firebase Hosting'e yalnızca tek bir tıklamayla dağıtmak için bir seçenek oluşturabilirsiniz (örneğin, bir IDE içindeki dağıtma düğmesini tıklatarak).

  • Statik içerik oluşturulduğunda dağıtımları otomatikleştirin. Bir işlem programlı olarak statik içerik oluşturduğunda (örneğin, wiki veya haber makalesi gibi kullanıcı tarafından oluşturulan içerik), oluşturulan içeriği dinamik olarak sunmak yerine statik dosyalar olarak dağıtabilirsiniz. Bu, pahalı bilgi işlem gücünden tasarruf etmenizi sağlar ve dosyalarınızı daha ölçeklenebilir bir şekilde sunar.

Bu kılavuzda öncelikle API'nin nasıl etkinleştirileceği, doğrulanacağı ve yetkilendirileceği açıklanmaktadır. Daha sonra bu kılavuz, bir Firebase Hosting sürümü oluşturmak, gerekli dosyaları sürüme yüklemek ve son olarak sürümü dağıtmak için bir örnek üzerinden yürür.

Bu REST API hakkında daha fazla bilgiyi Hosting REST API referans belgelerinin tamamında da bulabilirsiniz.

Başlamadan önce: REST API'yi etkinleştirin

Firebase Hosting REST API'sini Google API konsolunda etkinleştirmeniz gerekir:

  1. Google API konsolunda Firebase Hosting API sayfasını açın.

  2. İstendiğinde Firebase projenizi seçin.

  3. Firebase Hosting API sayfasında Etkinleştir'i tıklayın.

1. Adım: API isteklerini doğrulamak ve yetkilendirmek için bir erişim belirteci alın

Firebase projeleri, uygulama sunucunuzdan veya güvenilir ortamınızdan Firebase sunucu API'lerini çağırmak için kullanabileceğiniz Google hizmet hesaplarını destekler. Yerel olarak kod geliştiriyorsanız veya uygulamanızı şirket içinde dağıtıyorsanız, sunucu isteklerini yetkilendirmek için bu hizmet hesabı aracılığıyla elde edilen kimlik bilgilerini kullanabilirsiniz.

Bir hizmet hesabının kimliğini doğrulamak ve Firebase hizmetlerine erişmesine izin vermek için JSON biçiminde bir özel anahtar dosyası oluşturmanız gerekir.

Hizmet hesabınız için özel bir anahtar dosyası oluşturmak için:

  1. Firebase konsolunda Ayarlar > Hizmet Hesapları'nı açın.

  2. Yeni Özel Anahtar Oluştur'u tıklayın ve ardından Anahtar Oluştur'u tıklayarak onaylayın.

  3. 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 Google Auth Kitaplığı ile birlikte tercih ettiğiniz dil için 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ğin kimliğini bir JSON web belirteci veya JWT ile doğrular. Daha fazla bilgi için bkz. JSON web belirteçleri .

Piton

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 belirtecinizin süresi dolduktan sonra, güncellenmiş erişim belirtecini almak için belirteç yenileme yöntemi otomatik olarak çağrılır.

Adım 2: Projenizin varsayılan bir Barındırma sitesine sahip olduğundan emin olun

Firebase Hosting'e ilk dağıtımınızdan önce, Firebase projenizin varsayılan bir Hosting SITE sahip olması gerekir.

  1. sites.list uç noktasını çağırarak projenizin zaten varsayılan bir Barındırma sitesine sahip 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
    

    Ham 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 zaten varsayılan bir Barındırma sitesi vardır. Bu adımın geri kalanını atlayın ve 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 Barındırma siteniz yoktur. Bu adımın geri kalanını tamamlayın.

  2. Varsayılan Barındırma siteniz için SITE_ID karar verin. Bu SITE_ID karar verirken aşağıdakileri aklınızda bulundurun:

    • Bu SITE_ID varsayılan Firebase alt alan adlarınızı oluşturmak için kullanılır:
      SITE_ID .web.app ve SITE_ID .firebaseapp.com .

    • SITE_ID aşağıdaki gereksinimleri vardır:

      • Geçerli bir ana makine adı etiketi olmalıdır; yani içeremez . , _ , vesaire.
      • 30 karakter veya daha az olmalıdır
      • Firebase'de dünya çapında benzersiz olmalıdır

    Varsayılan Barındırma sitenizin SITE_ID olarak proje kimliğinizi sıklıkla kullanmanızı tavsiye ettiğimizi unutmayın. Firebase projelerini anlama bölümünde bu kimliği nasıl bulacağınızı öğrenin.

  3. siteId parametresi olarak istediğiniz SITE_ID kullanarak sites.create uç noktasını çağırarak varsayılan Barındırma 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
    

    Ham 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 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 kısımlarında dosyaları bu sürüme yükleyecek ve ardından sitenize dağıtacaksınız.

  1. Dağıtım yapmak istediğiniz sitenin SITE_ID belirleyin.

  2. Çağrıda SITE_ID kullanarak version.create uç noktasını arayın.

    (İsteğe bağlı) Ayrıca, tüm dosyaları belirli bir süre boyunca önbelleğe alan bir başlık ayarlamak 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
    

    Ham 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 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ıt, yeni sürüm için şu biçimde benzersiz bir tanımlayıcı içerir: sites/ SITE_ID /versions/ VERSION_ID . Bu özel sürüme referans vermek için bu kılavuz boyunca bu benzersiz tanımlayıcıya ihtiyacınız olacak.

4. Adım: Dağıtmak istediğiniz dosyaların listesini belirtin

Artık yeni sürüm tanımlayıcınıza sahip olduğunuza göre Firebase Hosting'e bu yeni sürümde hangi dosyaları dağıtmak istediğinizi söylemeniz gerekiyor.

Hosting'in tek tek dosyalar için maksimum boyut sınırının 2 GB olduğunu unutmayın.

Bu API, dosyaları bir SHA256 karmasına göre tanımlamanızı gerektirir. Dolayısıyla, API çağrısını yapmadan önce, öncelikle dosyaları Gzipping yaparak ve ardından her yeni sıkıştırılmış dosyanın SHA256 karma değerini alarak her statik dosya için bir karma hesaplamanız gerekir.

Örneğimize devam edersek, yeni sürümde üç dosyayı dağıtmak istediğinizi varsayalım: file1 , file2 ve file3 .

  1. Dosyaları gzipleyin:

    gzip file1 && gzip file2 && gzip file3

    Artık file1.gz , file2.gz ve file3.gz üzere üç sıkıştırılmış dosyanız var.

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

  3. Bu üç karma değerini bir API isteğiyle versions.populateFiles uç noktasına gönderin. Yüklenen dosya için her karmayı istenen yola 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 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ıt şunları içerir:

  • Yüklenmesi gereken her dosyanın karması . Örneğin, bu örnekte file1 daha önceki bir sürümde zaten yüklenmiş olduğundan, onun karması uploadRequiredHashes listesine dahil edilmemiştir.

  • Yeni sürüme özel uploadUrl .

İki yeni dosyayı yüklemek için bir sonraki adımda, versions.populateFiles yanıtındaki karmalara ve uploadURL ihtiyacınız olacak.

5. Adım: Gerekli dosyaları yükleyin

Gerekli her dosyayı ayrı ayrı yüklemeniz gerekir (önceki adımdaki versions.populateFiles yanıtında uploadRequiredHashes listelenen dosyalar). Bu dosya yüklemeleri için, önceki adımdaki dosya karmalarına ve uploadUrl ihtiyacınız olacak.

  1. Şu formatta dosyaya özel bir URL oluşturmak için uploadUrl bir eğik çizgi ve dosyanın karmasını ekleyin: https://upload-firebasehosting.googleapis.com/upload/sites/ SITE_ID /versions/ VERSION_ID /files/ FILE_HASH .

  2. Gerekli tüm dosyaları (bu örnekte yalnızca file2.gz ve file3.gz ) bir dizi istek kullanarak dosyaya özgü URL'ye tek tek 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 TAMAMLANDI 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 ayarlıyken 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 yapılan bu API çağrısı aşağıdaki JSON'u döndürür. status FINALIZED olarak 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: Sürümü dağıtım için yayınlayın

Artık son halini almış bir sürümünüz olduğuna göre, onu dağıtım için yayınlayın. Bu adım için, yeni sürümünüzün barındırma yapılandırmasını ve tüm içerik dosyalarını içeren sürümünüzün bir Release oluşturmanız gerekir.

Sürümünüzü oluşturmak 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 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"
}

Barındırma yapılandırması ve yeni sürüme ilişkin tüm dosyalar artık sitenize dağıtılmalı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 ayrıca SITE_ID .firebaseapp.com alan adınızla ilişkili URL'lerden de erişilebilir.

Ayrıca yeni sürümünüzü Firebase konsolunun Barındırma kontrol panelinde de görebilirsiniz.