Llama a funciones mediante solicitudes HTTP

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.