Cómo programar tu primera función para Serverless
¿Quieres programar tu primera función para arquitecturas serverless para que se ejecute como servicio en cualquier proveedor Cloud? Aquí te guiamos paso a paso para que lo consigas.
Estructura básica
En este caso vamos a hacer un ejemplo con Firebase, ya que es proveedor que no requiere que se introduzca ningún tipo de método de pago, y con el que se puede empezar simplemente registrándose.
La estructura básica que tiene siempre una función, ya sea en Firebase o en cualquier otro proveedor, es la siguiente:
const functions = require(‘firebase-functions’);
exports.helloWorld = functions.https.onRequest((request, reponse) => {
response.status(200).send(“Hello from Firebase!”);
});
Como podemos ver, es código JavaScript, y como en cualquier código de JavaScript lo primero que tenemos serían las dependencias.
En este caso solo tenemos una, que sería una librería propia de Firebase, firebase-functions, para facilitar el desarrollo de funciones.
Lo siguiente que se debe definir es una función exportable.
Firebase, una vez se suba esta función a su sistema de Funciones como Servicios, es meterla en un runtime NodeJS, que va a importar esta función y la va a ejecutar siempre que responda un evento. En este caso vamos a verlo con peticiones HTTP.
Hay que definir siempre una función que sea exportable, para que Firebase la pueda importar y ejecutarla cuando corresponda.
En este caso la función se llama helloWorld, y la definimos utilizando functions, la propia librería de Firebase, y utilizamos HTTPS porque queremos responder a eventos HTTP, y onRequest para que responda a los eventos siempre que sea una petición.
En el ejemplo Firebase pasa dos objetos, un objeto que se llama request y otro que se llama response.
En el objeto request vamos a tener toda la información, si es por ejemplo una petición POST vamos a tener toda la información que está mandando el usuario, y i es GET vamos a tener todos los parámetros, es decir, la información típica sobre las peticiones HTTP.
En el objeto response, que es el que tenemos que modificar para dar la respuesta que se quiera a esas peticiones.
En este caso lo único que va a hacer esta función es modificar el objeto response, le colocamos un status 200, que significa que ha ido todo bien, y con la función send vamos a enviar el mensaje que queremos, que aquí es “Hello from Firebase”.
Esta sería la respuesta al evento, devolver ese objeto response personalizado.
Este es el ejemplo más típico, es el ejemplo por defecto que da Firebase, pero siempre se puede personalizar esta función, y se debe hacer cuando se desarrolla este tipo arquitecturas.
Función personalizada
Vamos a añadir un poco más de complicación con otro ejemplo, en el que vamos a leer un parámetro de la petición, que va a ser el parámetro llamado message, y nuestra función va a devolver ese mensaje en el navegador.
const functions = require(‘firebase-functions’);
exports.helloWorld = functions.https.onRequest((request, reponse) => {
var message = request.query.message
response.status(200).send(message);
});
Esto lo hacemos simplemente leyendo ese parámetro con request.query, donde tenemos almacenados todos los parámetros de URL de nuestra petición, y con .message para coger el parámetro que se corresponda con ese con ese nombre.
Después lo modificamos y lo enviamos con la variable .send, en lugar de enviar el texto “Hello from Firebase” como hicimos en el ejemplo anterior.
Otra función personalizada
Podemos incluir aún más funcionalidades. En este caso vamos a hacer una validación, y si no tiene ese objeto message va a devolver un error 400, y si lo tiene, devuelve una petición con código de estado 200.
const functions = require(‘firebase-functions’);
exports.helloWorld = functions.https.onRequest((request, reponse) => {
var message = request.query.message
if(¡message){
response.status(400).send(‘ERROR: No message found’);
}
response.status(200).send(message);
});
Lo hacemos simplemente evaluando la variable message, y si no está definida vamos a responder con un status 400 y con un mensaje de error indicando que no se ha encontrado ningún mensaje en esta petición.
¿Qué puedes hacer en funciones?
En estas funciones se pueden implementar casi todo tipo de funcionalidades:
- Conectar con servicios de autenticación, como Google, Facebook, LinkedIn, Spotify, a través de una función serverless con todas las ventajas que tiene este tipo arquitectura.
- Leer y actualizar bases de datos. Una vez que un usuario quiera introducir alguna entrada nueva en la BBDD o quiera recoger información de esa base datos, también lo podemos hacer a través de serverless para responder a peticiones HTTP o cualquier otro tipo de eventos.
- Subida de archivos.
- Recepción de formularios.
- Responder a chatbots, para leer el mensaje que ha escrito el usuario y devolver una respuesta de acuerdo con eso. Toda esa funcionalidad puede ir dentro de una función serverless.
- Los asistentes por voz, que por defecto tienen aplicaciones que son también con Funciones como Servicios serverless.
- Procesar datos en streaming, algo que cada vez se utiliza más, y que podemos implementar fácilmente dentro de funciones que son ejecutadas como servicio.