با توابع ابری، محتوای پویا را ارائه دهید و میکروسرویس ها را میزبانی کنید

توابع Cloud را با میزبانی Firebase جفت کنید تا محتوای پویا خود را تولید و ارائه دهید یا APIهای REST را به عنوان ریزسرویس بسازید.

Cloud Functions for Firebase به شما امکان می دهد تا به طور خودکار کدهای پشتیبان را در پاسخ به درخواست های HTTPS اجرا کنید. کد شما در فضای ابری گوگل ذخیره می شود و در یک محیط مدیریت شده اجرا می شود. نیازی به مدیریت و مقیاس بندی سرورهای خود نیست.

برای مثال از موارد و نمونه‌هایی برای توابع ابری ادغام شده با میزبانی Firebase استفاده کنید، از نمای کلی بدون سرور ما دیدن کنید.

توابع Cloud را به میزبانی Firebase متصل کنید

این بخش یک مثال راهنما برای اتصال یک تابع به میزبانی Firebase ارائه می دهد.

توجه داشته باشید که برای بهبود عملکرد ارائه محتوای پویا، می‌توانید به صورت اختیاری تنظیمات حافظه پنهان خود را تنظیم کنید.

مرحله 1: توابع Cloud را تنظیم کنید

  1. مطمئن شوید که آخرین نسخه Firebase CLI را دارید و میزبانی Firebase را مقداردهی اولیه کرده اید.

    برای دستورالعمل های دقیق در مورد نصب CLI و مقداردهی اولیه هاست، به راهنمای شروع برای میزبانی مراجعه کنید.

  2. مطمئن شوید که Cloud Functions را تنظیم کرده اید:

    • اگر قبلاً توابع Cloud را راه‌اندازی کرده‌اید، می‌توانید به مرحله ۲ بروید: یک تابع HTTPS را ایجاد و آزمایش کنید .

    • اگر توابع Cloud را تنظیم نکرده اید:

      1. با اجرای دستور زیر از ریشه دایرکتوری پروژه خود، توابع Cloud را راه اندازی کنید:

        firebase init functions
      2. هنگامی که از شما خواسته شد، جاوا اسکریپت را انتخاب کنید (این مثال از JS استفاده می کند).

      3. بررسی کنید که یک دایرکتوری functions در دایرکتوری پروژه محلی خود دارید (که توسط فرمان Firebase ایجاد شده است). این دایرکتوری functions جایی است که کد مربوط به توابع ابری زندگی می کند.

مرحله 2: یک تابع HTTPS را برای سایت میزبان خود ایجاد و آزمایش کنید

  1. /functions/index.js در ویرایشگر مورد علاقه خود باز کنید.

  2. محتوای فایل را با کد زیر جایگزین کنید.

    این کد یک تابع HTTPS (به نام bigben ) ایجاد می کند که برای هر ساعت از روز به درخواست های HTTPS با BONG پاسخ می دهد، درست مانند ساعت.

    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 آزمایش کنید.

    1. از ریشه دایرکتوری پروژه محلی خود، دستور زیر را اجرا کنید:

      firebase emulators:start
    2. از طریق URL محلی بازگردانده شده توسط CLI به تابع دسترسی پیدا کنید، به عنوان مثال: http://localhost:5001/ PROJECT_ID /us-central1/bigben .

برای کسب اطلاعات بیشتر در مورد درخواست‌های HTTPS ، از اسناد Cloud Functions دیدن کنید.

مرحله بعدی نحوه دسترسی به این تابع HTTPS از URL میزبانی Firebase را راهنمایی می کند تا بتواند محتوای پویا برای سایت میزبان Firebase شما تولید کند.

مرحله 3: درخواست های HTTPS را به تابع خود هدایت کنید

با بازنویسی قوانین ، می‌توانید درخواست‌هایی را که با الگوهای خاص مطابقت دارند به یک مقصد هدایت کنید. مراحل زیر به شما نشان می دهد که چگونه تمام درخواست ها را از مسیر ../bigben در سایت میزبانی خود هدایت کنید تا تابع bigben را اجرا کنید.

  1. فایل firebase.json خود را باز کنید.

  2. پیکربندی rewrite زیر را در قسمت hosting اضافه کنید:

    "hosting": {
      // ...
    
      // Add the "rewrites" attribute within "hosting"
      "rewrites": [ {
        "source": "/bigben",
        "function": {
          "functionId": "bigben",
          "region": "us-central1"  // optional (see note below)
          "pinTag": true           // optional (see note below)
        }
      } ]
    }
    
  3. با آزمایش مجدد با شبیه سازهای Firebase، تأیید کنید که تغییر مسیر شما همانطور که انتظار می رود کار می کند.

    1. از ریشه دایرکتوری پروژه محلی خود، دستور زیر را اجرا کنید:

      firebase emulators:start
    2. از URL میزبانی شده محلی برای سایت خود که توسط CLI بازگردانده شده است (معمولا localhost:5000 ) بازدید کنید، اما URL را با bigben اضافه کنید، مانند: http://localhost:5000/bigben

  4. عملکرد خود و عملکرد آن را برای سایت خود تکرار کنید. از شبیه سازهای Firebase برای آزمایش این تکرارها استفاده کنید.

برای بهترین عملکرد، با انتخاب یکی از مناطق زیر، توابع خود را با هاست قرار دهید:

  • us-west1
  • us-central1
  • us-east1
  • europe-west1
  • asia-east1

برای جزئیات بیشتر در مورد قوانین بازنویسی، از صفحه پیکربندی میزبانی بازدید کنید. همچنین می‌توانید با ترتیب اولویت پاسخ‌ها برای پیکربندی‌های مختلف میزبانی آشنا شوید.

توجه داشته باشید که برای بهبود عملکرد ارائه محتوای پویا، می‌توانید به صورت اختیاری تنظیمات حافظه پنهان خود را تنظیم کنید.

مرحله 4: تابع خود را مستقر کنید

هنگامی که عملکرد شما به صورت دلخواه در شبیه ساز کار می کند، می توانید به استقرار، آزمایش و اجرای آن با منابع واقعی پروژه ادامه دهید. این زمان خوبی برای در نظر گرفتن تنظیم گزینه های زمان اجرا برای کنترل رفتار مقیاس پذیری برای توابع در حال اجرا در تولید است.

  1. با اجرای دستور زیر از ریشه دایرکتوری پروژه محلی خود، تابع و همچنین محتوای میزبانی و پیکربندی خود را در سایت خود مستقر کنید:

    firebase deploy --only functions,hosting
  2. از آدرس های زیر به سایت زنده و عملکرد خود دسترسی داشته باشید:

    • زیر دامنه های Firebase شما:
      PROJECT_ID .web.app/bigben و PROJECT_ID .firebaseapp.com/bigben

    • هر دامنه سفارشی متصل:
      CUSTOM_DOMAIN /bigben

از یک چارچوب وب استفاده کنید

می‌توانید از چارچوب‌های وب، مانند Express.js ، در توابع ابری استفاده کنید تا محتوای پویا برنامه‌تان را ارائه کنید و برنامه‌های پیچیده وب را راحت‌تر بنویسید.

بخش زیر یک مثال کامل برای استفاده از Express.js با میزبانی Firebase و توابع Cloud ارائه می دهد.

  1. با اجرای دستور زیر از پوشه functions خود Express.js را در پروژه محلی خود نصب کنید:

    npm install express --save
  2. فایل /functions/index.js خود را باز کنید، سپس Express.js را وارد و مقداردهی اولیه کنید:

    const functions = require('firebase-functions');
    const express = require('express');
    const app = express();
    
  3. دو نقطه پایانی زیر را اضافه کنید:

    1. اولین نقطه پایانی را برای ارائه نمایه وب سایت ما در / اضافه کنید.

      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. و یک نقطه پایانی دیگر برای برگرداندن تعداد BONG به عنوان یک API، در قالب JSON، تحت /api :

      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 را به عنوان یک تابع HTTPS صادر کنید:

    exports.app = functions.https.onRequest(app);
    
  5. در فایل firebase.json خود، تمام درخواست ها را به تابع app هدایت کنید. این بازنویسی به Express.js اجازه می‌دهد تا مسیر فرعی مختلفی را که ما پیکربندی کرده‌ایم (در این مثال / و /api ) ارائه دهد.

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

میان افزار اضافه کنید

در ادامه مثال ما، اکنون که از Express.js استفاده می کنید، می توانید میان افزار Express.js را به روش معمولی اضافه کنید. به عنوان مثال، می توانید درخواست های CORS را در نقاط پایانی ما فعال کنید.

  1. با اجرای دستور زیر میان افزار cors را نصب کنید:

    npm install --save cors
  2. فایل /functions/index.js خود را باز کنید، سپس cors به برنامه Express.js خود اضافه کنید، مانند:

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

برای کسب اطلاعات بیشتر در مورد استفاده از Firebase با برنامه‌های Express و ماژول‌های میان‌افزار، از مستندات Cloud Functions دیدن کنید.

مراحل بعدی