Catch up on highlights from Firebase at Google I/O 2023. Learn more

Cloud Functions ile dinamik içerik sunun ve mikro hizmetleri barındırın

Dinamik içeriğinizi oluşturmak ve sunmak veya REST API'lerini mikro hizmetler olarak oluşturmak için Bulut İşlevlerini Firebase Barındırma ile eşleştirin.

Cloud Functions for Firebase, HTTPS isteklerine yanıt olarak arka uç kodunu otomatik olarak çalıştırmanıza olanak tanır. Kodunuz Google'ın bulutunda saklanır ve yönetilen bir ortamda çalışır. Kendi sunucularınızı yönetmenize ve ölçeklendirmenize gerek yoktur.

Örneğin, Firebase Barındırma ile entegre Bulut İşlevleri için kullanım durumları ve örnekleri için sunucusuz genel bakış sayfamızı ziyaret edin.

Cloud Functions'ı Firebase Barındırmaya Bağlayın

Bu bölüm, Firebase Barındırma'ya bir işlev bağlamak için bir gözden geçirme örneği sağlar.

Dinamik içerik sunma performansını artırmak için isteğe bağlı olarak önbellek ayarlarınızı yapabileceğinizi unutmayın.

1. Adım: Cloud Functions'ı kurun

  1. Firebase CLI'nin en son sürümüne sahip olduğunuzdan ve Firebase Hosting'i başlattığınızdan emin olun.

    CLI'yi yükleme ve Barındırmayı başlatma hakkında ayrıntılı talimatlar için, Barındırma için Başlarken kılavuzuna bakın.

  2. Cloud Functions'ı kurduğunuzdan emin olun:

    • Cloud Functions'ı zaten kurduysanız 2. Adım: HTTPS işlevi oluşturma ve test etme adımına ilerleyebilirsiniz.

    • Cloud Functions'ı kurmadıysanız :

      1. Proje dizininizin kökünden aşağıdaki komutu çalıştırarak Cloud Functions'ı başlatın:

        firebase init functions
      2. İstendiğinde, JavaScript'i seçin (bu gözden geçirme örneği JS kullanır).

      3. Yerel proje dizininizde (az önce çalıştırdığınız Firebase komutu tarafından oluşturulmuş) bir functions dizininin olup olmadığını kontrol edin. Bu functions dizini, Cloud Functions kodunun yaşadığı yerdir.

2. Adım: Barındırma siteniz için bir HTTPS işlevi oluşturun ve test edin

  1. Favori düzenleyicinizde /functions/index.js dosyasını açın.

  2. Dosyanın içeriğini aşağıdaki kodla değiştirin.

    Bu kod, tıpkı bir saat gibi HTTPS isteklerine günün her saati için bir BONG ile yanıt veren bir HTTPS işlevi ( bigben adlı) oluşturur.

    const functions = require('firebase-functions');
    
    exports.bigben = functions.https.onRequest((req, res) => {
      const hours = (new Date().getHours() % 12) + 1  // London is UTC + 1hr;
      res.status(200).send(`<!doctype html>
        <head>
          <title>Time</title>
        </head>
        <body>
          ${'BONG '.repeat(hours)}
        </body>
      </html>`);
    });
    
  3. Firebase Local Emulator Suite'i kullanarak işlevlerinizi yerel olarak test edin.

    1. Yerel proje dizininizin kökünden aşağıdaki komutu çalıştırın:

      firebase emulators:start
    2. CLI tarafından döndürülen yerel URL aracılığıyla işleve erişin, örneğin: http://localhost:5001/ PROJECT_ID /us-central1/bigben .

HTTPS istekleri hakkında daha fazla bilgi edinmek için Bulut İşlevleri belgelerini ziyaret edin.

Bir sonraki adım, Firebase tarafından barındırılan siteniz için dinamik içerik oluşturabilmesi için bir Firebase Barındırma URL'sinden bu HTTPS işlevine nasıl erişeceğiniz konusunda size yol gösterir.

3. Adım: HTTPS isteklerini işlevinize yönlendirin

Yeniden yazma kuralları ile belirli kalıplarla eşleşen istekleri tek bir hedefe yönlendirebilirsiniz. Aşağıdaki adımlar, Hosting sitenizdeki ../bigben yolundaki tüm istekleri bigben işlevini yürütmek için nasıl yönlendireceğinizi gösterir.

  1. firebase.json dosyanızı açın.

  2. hosting bölümünün altına aşağıdaki rewrite yapılandırmasını ekleyin:

    "hosting": {
      // ...
    
      // Add the "rewrites" attribute within "hosting"
      "rewrites": [ {
        "source": "/bigben",
        "function": "bigben",
        "region": "us-central1"  // optional (see note below)
        "pinTag": true           // optional (see note below)
      } ]
    }
    
  3. Firebase öykünücüleriyle yeniden test ederek yönlendirmenizin beklendiği gibi çalıştığını onaylayın.

    1. Yerel proje dizininizin kökünden aşağıdaki komutu çalıştırın:

      firebase emulators:start
    2. Siteniz için CLI tarafından döndürülen yerel olarak barındırılan URL'yi ziyaret edin (genellikle localhost:5000 ), ancak URL'yi bigben ile ekleyin, şöyle: http://localhost:5000/bigben

  4. Siteniz için işlevinizi ve işlevselliğini yineleyin. Bu yinelemeleri test etmek için Firebase emülatörlerini kullanın.

Yeniden yazma kuralları hakkında daha fazla ayrıntı için Barındırma yapılandırma sayfasını ziyaret edin. Çeşitli Barındırma yapılandırmaları için yanıtların öncelik sırasını da öğrenebilirsiniz.

Dinamik içerik sunma performansını artırmak için isteğe bağlı olarak önbellek ayarlarınızı yapabileceğinizi unutmayın.

4. Adım: İşlevinizi dağıtın

İşleviniz öykünücüde istediğiniz gibi çalıştığında, onu gerçek proje kaynaklarıyla dağıtmaya, test etmeye ve çalıştırmaya devam edebilirsiniz. Bu, üretimde çalışan işlevler için ölçekleme davranışını kontrol etmek üzere çalışma zamanı seçeneklerini ayarlamayı düşünmek için iyi bir zamandır.

  1. Yerel proje dizininizin kökünden aşağıdaki komutu çalıştırarak işlevinizi, Barındırma içeriğinizi ve yapılandırmanızı sitenize dağıtın:

    firebase deploy --only functions,hosting
  2. Canlı sitenize ve işlevinize aşağıdaki URL'lerden erişin:

    • Firebase alt alan adlarınız:
      PROJECT_ID .web.app/bigben ve PROJECT_ID .firebaseapp.com/bigben

    • Tüm bağlı özel alanlar :
      CUSTOM_DOMAIN /bigben

Bir web çerçevesi kullanın

Uygulamanızın dinamik içeriğini sunmak ve karmaşık web uygulamalarını daha kolay yazmak için Cloud Functions'ta Express.js gibi web çerçevelerini kullanabilirsiniz.

Aşağıdaki bölüm, Express.js'yi Firebase Barındırma ve Bulut İşlevleri ile kullanmaya yönelik bir örnek sunmaktadır.

  1. functions dizininizden aşağıdaki komutu çalıştırarak Express.js'yi yerel projenize kurun:

    npm install express --save
  2. /functions/index.js dosyanızı açın, ardından Express.js'yi içe aktarın ve başlatın:

    const functions = require('firebase-functions');
    const express = require('express');
    const app = express();
    
  3. Aşağıdaki iki uç noktayı ekleyin:

    1. / adresinde web sitemizin dizinine hizmet verecek ilk uç noktayı ekleyin.

      app.get('/', (req, res) => {
        const date = new Date();
        const hours = (date.getHours() % 12) + 1;  // London is UTC + 1hr;
        res.send(`
          <!doctype html>
          <head>
            <title>Time</title>
            <link rel="stylesheet" href="/style.css">
            <script src="/script.js"></script>
          </head>
          <body>
            <p>In London, the clock strikes:
              <span id="bongs">${'BONG '.repeat(hours)}</span></p>
            <button onClick="refresh(this)">Refresh</button>
          </body>
        </html>`);
      });
      
    2. Ve BONG sayısını bir API olarak JSON biçiminde, /api altında döndürmek için başka bir uç nokta:

      app.get('/api', (req, res) => {
        const date = new Date();
        const hours = (date.getHours() % 12) + 1;  // London is UTC + 1hr;
        res.json({bongs: 'BONG '.repeat(hours)});
      });
      
  4. Express.js uygulamasını bir HTTPS işlevi olarak dışa aktarın:

    exports.app = functions.https.onRequest(app);
    
  5. firebase.json dosyanızda, tüm istekleri app işlevine yönlendirin. Bu yeniden yazma, Express.js'nin yapılandırdığımız farklı alt yola (bu örnekte / ve /api ) hizmet vermesine izin verir.

    {
     "hosting": {
       // ...
    
       // Add the "rewrites" attribute within "hosting"
       "rewrites": [ {
         "source": "**",
         "function": "app"
       } ]
     }
    }
    

Ara yazılım ekle

Örneğimize devam ederek, artık Express.js kullandığınıza göre, Express.js ara katman yazılımını normal şekilde ekleyebilirsiniz. Örneğin, uç noktalarımızda CORS isteklerini etkinleştirebilirsiniz.

  1. Aşağıdaki komutu çalıştırarak cors ara katman yazılımını kurun:

    npm install --save cors
  2. /functions/index.js dosyanızı açın, ardından Express.js uygulamanıza şu şekilde cors ekleyin:

    const cors = require('cors')({origin: true});
    app.use(cors);
    

Firebase'i Express uygulamaları ve ara yazılım modülleri ile kullanma hakkında daha fazla bilgi edinmek için Bulut İşlevleri belgelerini ziyaret edin.

Sonraki adımlar