Firebase Cloud Functions: Difference between onRequest and onCall

后端 未结 1 690
时光取名叫无心
时光取名叫无心 2020-11-30 05:41

Going through the docs, I encountered:

...you can call functions directly with an HTTP request or a call from the client.

~ source

相关标签:
1条回答
  • 2020-11-30 06:00

    The official documentation for those is really helpful, but from the view of an amateur, the described differences were confusing at first.

    • Both types, when deployed, are assigned with a unique HTTPS endpoint URL and can be accessed directly.

    onCall

    • Can be invoked (and this is also the main purpose) directly from the client app.

      functions.httpsCallable('getUser')({uid})
        .then(r => console.log(r.data.email))
      
    • It is implemented with user-provided data and automagic 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)
        })
      })
      
    • The context automagically contains metadata about the request such as uid and token.
    • Input data and response objects are automatically (de)serialized.

    onRequest

    • Firebase onRequest Docs
    • Serves mostly as an Express API endpoint.
    • It is implemented with express Request and Response objects.

      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))
      })
      
    • Depends on user-provided authorization headers.
    • You are responsible for input and response data.

    Read more here Is the new Firebase Cloud Functions https.onCall trigger better?

    0 讨论(0)
提交回复
热议问题