Al igual que en la 1ª gen., puedes activar una función a través de una solicitud HTTP con el controlador onRequest()
. Esto te permite invocar una función mediante
los siguientes métodos HTTP admitidos: GET
, POST
, PUT
, DELETE
y
OPTIONS
.
Opciones de HTTP adicionales
Opción | Descripción |
---|---|
region |
Las funciones de HTTP pueden especificar un array de regiones o una sola región. Cuando se especifican múltiples regiones, se implementa una instancia de función independiente para cada región. |
timeoutSeconds |
Las funciones de HTTP pueden especificar un tiempo de espera de hasta una hora. |
cors |
Las funciones de HTTP pueden especificar políticas de CORS. Puedes configurar esto como true para permitir todos los orígenes, o como string , regex o array si deseas especificar los orígenes permitidos. Si la política no se configura explícitamente, se establece de forma predeterminada como falsa o sin política de CORS. |
Configura el CORS (uso compartido de recursos entre dominios)
Usa la opción cors
para controlar qué orígenes pueden
acceder a tu función. Según la configuración predeterminada, las funciones de HTTP no tienen CORS configurado,
lo que significa que cualquier solicitud de origen cruzado a la función generará el siguiente error:
request has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
También puedes inhabilitar CORS explícitamente si estableces la opción cors
en false
para tu función.
A fin de permitir algunas solicitudes de origen cruzado, pero no todas, puedes pasar una lista de
dominios específicos o expresiones regulares que deberían permitirse. Por ejemplo, si
tienes propiedad de los dominios firebase.com
y flutter.com
, y firebase.com
puede
tener muchos subdominios, es posible establecer la opción cors
como
[/firebase\.com$/, 'flutter.com']
.
Si tu función debe estar disponible de forma abierta, por ejemplo, si entrega una
API o un sitio web públicos, establece la política cors
como true
.
Activa una función con una solicitud HTTP
Usa onRequest()
del subpaquete firebase-functions/v2/https
para crear una función que controle eventos HTTP.
El evento onRequest()
admite routers y apps que administra
el framework web Express.
Los ejemplos de esta página se basan en una
muestra del servidor de tiempo
que se activa cuando envías
una solicitud HTTP GET
al extremo de las funciones. La función de muestra
recupera la hora actual del servidor, formatea el tiempo según se especifica en un parámetro de consulta de URL
y envía el resultado en la respuesta HTTP.
Usa los objetos Request y Response de Express
El objeto Request, que se usa como argumento para onRequest()
, te da acceso a las propiedades de la solicitud HTTP que envió el cliente, mientras que el objeto Response te proporciona una manera de enviar una respuesta al cliente.
exports.date = onRequest( {timeoutSeconds: 1200, region: ["us-west1", "us-east1"]}, (req, res) => { // ... });
Usa apps de Express existentes
Si usas App como argumento de
onRequest()
, puedes
pasar una app de Express completa a una función HTTP, como se muestra a continuación:
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);
Invoca una función HTTP
Después de implementar una función de HTTP, puedes invocarla mediante su propia URL única. Debes usar la salida de URL exacta de la CLI luego de la implementación.
Por ejemplo, la URL para invocar date()
tiene el siguiente aspecto:
https://date-<random-hash>-<region>.a.run.app
Con el enrutamiento de apps de Express, el nombre de la función se agrega como prefijo a las rutas de URL en la app que definas.
Lee los valores de la solicitud
En el ejemplo de la función date()
, se prueban tanto el parámetro de URL como el cuerpo
para verificar el valor de format
a fin de configurar el formato de fecha y hora que se usará:
let format = req.query.format; format = req.body.format;
Finaliza funciones HTTP
Siempre termina una función HTTP con send()
, redirect()
o end()
. De lo contrario, tu función podría seguir ejecutándose, y el sistema podría forzar su finalización. Consulta también
Síncrono, asíncrono y promesas.
Después de recuperar la hora del servidor y darle formato mediante el módulo
moment
de Node.js, la función date()
concluye con el envío del resultado en la respuesta HTTP:
const formattedDate = moment().format(`${format}`); logger.log("Sending formatted date:", formattedDate); res.status(200).send(formattedDate);
Realiza la integración en Firebase Hosting
Puedes conectar una función HTTP con Firebase Hosting. Las solicitudes en tu sitio de Firebase Hosting se pueden dirigir a funciones HTTP específicas. Esto también te permite usar tu propio dominio personalizado con una función HTTP. Obtén más información sobre cómo conectar Cloud Functions con Firebase Hosting.