Las funciones que he implementado para despliegue FaaS no son un prototipo del microservicio sino que responden a historias de usuario y serán útiles en el proyecto. Por eso, he creado una carpeta en app junto al resto del código para estas funciones y sus tests.
Más adelante explico el despliegue de esta parte.
La primera función que he implementado usando serverless corresponde a HU8: Como usuario, quiero poder obtener una lista de películas y series para ver ejemplos de lo que puedo elegir en la aplicación. Filtrar por películas/series, ordenarlas, buscar, ....
Esta función la he alojado en netlify admite peticiones GET con los siguientes query parameters opcionales:
- 'type': Permite filtrar por tipo (películas o series) 'MOVIE' o 'SERIES'.
- 'search': Busca en las synopsis y títulos la cadena de caracteres proporcionada.
- 'orderBy': Ordena en base al siguiente criterio.
[campo],[orden]. Encampoadmite 'popularity' y 'year'. Enordenadmite 'DESC' y 'ASC'.
Esta es la función y estos sus tests que se ejecutan automáticamente en esta github action.
Además, he implementado este frontend que se puede ver en su carpeta del repositorio.
Mi intención es que esta función se llame cada vez que un usuario entre a la página, de esta forma lo primero que ve son unas cuantas películas y series entre las que decidir. Incentivando que inicie una sesión con alguien. Así, el microservicio que se implementará más adelante tiene menos carga y se dedica solamente a administrar las sesiones.
No directamente relacionado con serverless pero esencial para que la función anterior funcione y obtener todas estas películas y series he implementado un script en Python que es ejecutado por una Github Action diariamente.
- Obtiene los datos de the movie db. En concreto, las películas y series "trending" del día.
- Los parsea para instanciar entidades de mi aplicación.
- Serializa las instancias con pickle en binario, pensado para que el microservicio los consuma, y en JSON para que las funciones serverless (que he escrito en JS) los utilicen.
- Por último hace commit y push al repositorio.
El script es este, los test son estos y la github action es esta.
La otra función que he implementado usando FaaS corresponde a HU9: Como desarrollador, quiero que los usuarios puedan dar feedback fácilmente.
- Solo admite el método POST y devuelve un código 405 (method not allowed) de lo contrario.
- Solo admite un cuerpo con formato:
{"feedback":[string]}, de lo contrario devuelve un código 400 (bad request). - Hace un profanity filter en inglés con el mensaje y devuelve 400 si es ofensivo.
- Por último, usando la API de Telegram, envía el mensaje a través de un bot a este canal.
Esta función se usa también en el frontend.
La función es esta, los tests son estos y el despliegue está aquí.
El despliegue de estas funciones y el frontend lo he hecho en Netlify. Pese a que se puede hacer desde la UI, he configurado todo en netlify.toml. En él especifico el directorio en el que implemento las funciones serverless, el directorio del frontend y las instrucciones de construcción.
He utilizado este servicio porque es un término medio entre cómodo y configurable. Me ha permitido incorporarlo a la estructura que ya tenía del proyecto con bastante facilidad, además del frontend.
Finalmente, para probar también otro servicio, he implementado ambas funciones en un repositorio aparte para Firebase. Se despliegan con esta github action.

