Como na 1ª geração, é possível acionar uma função com uma solicitação HTTP usando o manipulador
onRequest()
. Isso permite que você invoque uma função usando os seguintes métodos HTTP compatíveis: GET
, POST
, PUT
, DELETE
e OPTIONS
.
Outras opções de HTTP
Opção | Descrição |
---|---|
region |
As funções HTTP podem especificar uma matriz de regiões, bem como uma única região. Quando várias regiões são especificadas, uma instância de função separada é implantada em cada região. |
timeoutSeconds |
As funções HTTP podem especificar um tempo limite de até uma hora. |
cors |
As funções HTTP podem especificar políticas do CORS. Defina isso como true para permitir que todas as origens ou um string , regex ou array especifique as origens permitidas. Se não for definido explicitamente, o padrão será políticas de CORS falsas ou nenhuma. |
Como configurar o compartilhamento de recursos entre origens (CORS, na sigla em inglês)
Use a opção cors
para controlar quais origens podem
acessar a função. Por padrão, as funções HTTP não têm o CORS configurado, o que significa que qualquer solicitação de origem cruzada para a função resulta neste erro:
request has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Também é possível desativar explicitamente o CORS definindo a opção cors
como false
para a função.
Para permitir algumas solicitações de origem cruzada, mas não todas, transmita uma lista de
domínios específicos ou expressões regulares que precisam ser permitidas. Por exemplo, se
você tem os domínios firebase.com
e flutter.com
, e firebase.com
pode
ter muitos subdomínios, defina a opção cors
como
[/firebase\.com$/, 'flutter.com']
Caso sua função precise estar disponível de maneira aberta, por exemplo, se ela estiver exibindo uma
API ou um site público, defina a política cors
como true
.
Acionar uma função com uma solicitação HTTP
Use onRequest()
do subpacote firebase-functions/v2/https
para criar uma função que gerencia eventos HTTP.
O evento onRequest()
é compatível com roteadores e apps gerenciados pelo
framework da Web Express.
Os exemplos desta página foram criados com base em uma amostra de servidor de tempo, que é acionada quando você envia uma solicitação HTTP GET
para o endpoint das funções. A função de amostra
recupera a hora atual do servidor, formata a hora conforme especificado em um parâmetro
de consulta de URL e envia o resultado na resposta HTTP.
Como usar objetos de solicitação e resposta da Express
Usado na forma de argumentos de onRequest()
, o objeto de solicitação (em inglês) concede acesso às propriedades da solicitação HTTP enviada pelo cliente, e o objeto de resposta (em inglês) permite retornar uma resposta a ele.
exports.date = onRequest( {timeoutSeconds: 1200, region: ["us-west1", "us-east1"]}, (req, res) => { // ... });
Como usar apps Express existentes
Ao usar o app como argumento de onRequest()
, é possível transmitir um app Express completo para uma função HTTP.
const { onRequest } = require('firebase-functions/v2/https');
const express = require('express');
const app = express();
// Add middleware to authenticate requests
app.use(myMiddleware);
// build multiple CRUD interfaces:
app.get('/:id', (req, res) => res.send(Widgets.getById(req.params.id)));
app.post('/', (req, res) => res.send(Widgets.create()));
app.put('/:id', (req, res) => res.send(Widgets.update(req.params.id, req.body)));
app.delete('/:id', (req, res) => res.send(Widgets.delete(req.params.id)));
app.get('/', (req, res) => res.send(Widgets.list()));
// Expose Express API as a single Cloud Function:
exports.widgets = onRequest(app);
Invocar uma função HTTP
Depois de implantar uma função HTTP, é possível invocá-la usando o URL exclusivo dela. Use a saída exata do URL da CLI após a implantação.
Por exemplo, o URL de invocação date()
terá a seguinte aparência:
https://date-<random-hash>-<region>.a.run.app
Com o roteamento de app do Express, o nome da função é adicionado como um prefixo aos caminhos do URL no aplicativo definido por você.
Ler os valores da solicitação
No exemplo de função date()
, a função testa o parâmetro de URL e o corpo de um valor de format
para definir o formato de data/hora a ser usado:
let format = req.query.format; format = req.body.format;
Encerrar funções HTTP
Sempre encerre uma função HTTP com send()
, redirect()
ou end()
. Caso contrário, ela pode continuar a ser executada e interrompida automaticamente pelo sistema. Veja também Sincronização, dessincronização e promessas.
A função date()
será concluída depois que o horário do servidor for recuperado e formatado com o módulo moment
(em inglês) do Node.js e quando o resultado na resposta HTTP for enviado.
const formattedDate = moment().format(`${format}`); logger.log("Sending formatted date:", formattedDate); res.status(200).send(formattedDate);
Como integrar com o Firebase Hosting
Você pode conectar uma função HTTP ao Firebase Hosting. As solicitações no seu site do Firebase Hosting podem ser encaminhadas para funções HTTP específicas. Isso também permite que você use seu próprio domínio personalizado com uma função HTTP. Saiba mais sobre Como conectar o Cloud Functions ao Firebase Hosting.