web-dev-qa-db-fra.com

Fonctions Cloud Firebase: Différence entre onRequest et onCall

En parcourant les documents, j'ai rencontré:

... vous pouvez appeler des fonctions directement avec une requête HTTP ou un appel du client .

~ source

il (lien dans la citation) est une mention sur functions.https.onCall.

Mais dans le tutoriel ici , une autre fonction functions.https.onRequest est utilisé, alors lequel dois-je utiliser et pourquoi? Quelle est la différence/similitude entre eux?

Documentation pour functions.https est ici .

21
Qwerty

Le documentation officielle pour ceux-ci est vraiment utile, mais du point de vue d'un amateur, les différences décrites étaient déroutantes au début.

  • Les deux types , lorsqu'ils sont déployés, sont affectés d'une URL de point de terminaison HTTPS unique et sont accessibles directement.

onCall

  • Peut être invoqué (et c'est également l'objectif principal) directement à partir de l'application cliente.

    functions.httpsCallable('getUser')({uid})
      .then(r => console.log(r.data.email))
    
  • Il est implémenté avec data et automagic context fournis par l'utilisateur.

    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 automagiquement contient des métadonnées sur la demande comme uid et token.
  • Les objets d'entrée data et response sont (dé) sérialisés automatiquement.

sur demande

  • Firebase onRequest Docs
  • Sert principalement de point de terminaison d'API Express.
  • Il est implémenté avec des objets express Request et Response.

    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))
    })
    
  • Dépend des en-têtes d'autorisation fournis par l'utilisateur.
  • Vous êtes responsable des données d'entrée et de réponse.

Pour en savoir plus, cliquez ici Le nouveau déclencheur https.onCall des fonctions cloud de Firebase est-il meilleur?

29
Qwerty