1. ホーム
  2. javascript

[解決済み] Firebase Cloud Functions: onRequestとonCallの違いについて

2022-10-18 04:34:43

質問

ドキュメントを読んでいたら、こんなことに遭遇しました。

...関数を直接呼び出すには、HTTPリクエストか からの呼び出し .

~ ソース

そこ (引用文中のリンク) についての言及があります。 functions.https.onCall .

しかし、チュートリアルでは ここで のように、別の関数 functions.https.onRequest が使われていますが、どちらを使うべきなのでしょうか、またその理由は?両者の違いや類似点は何ですか?

のドキュメント functions.https ここで .

どのように解決するのですか?

この 公式ドキュメント はとても参考になるのですが、素人からすると、記載されている違いに最初は戸惑いました。

  • 両タイプ は、デプロイされると一意の HTTPS エンドポイント URL が割り当てられ、https クライアントを使用して直接アクセスすることができます。

  • しかし、その方法には 1 つの重要な違いがあります。 と思われる と呼ばれることです。 .

    • onCall : クライアントの firebase.functions()
    • onRequest : 標準的な https クライアントを介して (例. fetch() JSのAPI)

オンコール

  • クライアントアプリから直接呼び出すことができます(これが主な目的でもあります)。

     functions.httpsCallable('getUser')({uid})
       .then(r => console.log(r.data.email))
    
    
  • ユーザが提供する実装で data オートマジック context .

     export const getUser = functions.https.onCall((data, context) => {
       if (!context.auth) return {status: 'error', code: 401, message: 'Not signed in'}
       return new Promise((resolve, reject) => {
         // find a user by data.uid and return the result
         resolve(user)
       })
     })
    
    
  • context を自動で はメタデータを含む のようなリクエストに関する uidtoken .

  • 入力 dataresponse オブジェクトは自動的に(デ)シリアライズされます。

onRequest

  • Firebase onRequest ドキュメント

  • 主にExpress APIのエンドポイントとして機能します。

  • エクスプレスで実装されている RequestResponse オブジェクトを作成します。

     export const getUser = functions.https.onRequest((req, res) => {
       // verify user from req.headers.authorization etc.
       res.status(401).send('Authentication required.')
       // if authorized
       res.setHeader('Content-Type', 'application/json')
       res.send(JSON.stringify(user))
     })
    
    
  • ユーザが提供する認可ヘッダに依存します。

  • 入力データと応答データに責任を持つ。

詳しくはこちら 新しいFirebase Cloud Functions https.onCallトリガーは良いですか?