Desarrollo X

Photo by RetroSupply on Unsplash

Desarrollo X

Juntando varias piezas para resolver un reto de programación

El título no tiene nada que ver con desarrollo de apps prohibidas o realizado con poco ropa 😁 surge a raíz de las herramientas utilizadas: GeneXus (nunca puede faltar) y Xata (un interesante descubrimiento).

Como parte del Backend de la suerte 2023 (actividad que se está volviendo tradicional en la comunidad Malandriner) me tocó resolver el reto con Xata, una herramienta que se presenta como "la base de datos serverless que te dará super-poderes". No la conocía de nada pero veo que tiene características interesantes (consulta vía API, manejo de ramas para migración), una capa gratuita generosa y unos precios muy atractivos, muy probablemente la vuelva a utilizar en un futuro en algún proyecto real.

Primeros pasos

Se puede acceder a Xata con los clientes oficiales (la documentación muestra ejemplos con TS) y vía su API REST. Como siempre hago al utilizar un API nueva (o incluso en alguna conocida) es probar los endpoints con Insomnia.

La documentación se ve completa, pero con pocos ejemplos, sin embargo resulta sencilla de seguir hasta dar con los endpoints que creo voy a necesitar. Lo primero es obtener el token (desde la configuración de la cuenta) que irá en todas las llamadas.

Para las pruebas utilicè los siguientes métodos:

Primera parte lista, con esto tengo la seguridad de poder consumir desde GX.

El MVP

Ahora si a usar Xata desde GeneXus, lo que me pareció interesante es que tienen disponible la especificación OpenApi para importarla (con ejemplos en insomnia y postman). Así que voy por esa opción a ver cómo me va, primero con el Core API que da acceso al usuario y el espacio de trabajo, y luego con la Workspace API que da acceso a las bases de datos, tablas, registros, entre otras.

Genexus - OpenAPI Import Tool

Al cargar se despliegan todos los métodos, selecciono solo los que creo voy a necesitar para el primer reto (luego veré cómo agregar más). Si bien esto genera todos los objetos necesarios, el consumo de los endpoints es un poco enredado, así que mejor opté por utilizar el código generado desde insomnia.

curl --request POST \
  --url https://carlos-encalada-s-workspace-gq7o0i.us-west-2.xata.sh/db/cocina-zombie:main/tables/comanda/data \
  --header 'Authorization: Bearer xau_Z5b2SjkZRrLHOlYqWxjvZ8LNIR3j9jxM1' \
  --header 'Content-Type: application/json' \
  --data '{"FechaHora":"2023-03-13T20:00:00Z"}'

Para cumplir con los requisitos del primer reto (ver detalles), simplemente hice un web panel que en el evento Star recupera la última fecha-hora y al dar clic en el botón inserta un nuevo registro. Para el deploy utilice docker, la imagen se la puede encontrar aquí y una versión de prueba acá.

Web para registrar comandas

Para los próximos retos espero hacer algo más sofisticado y actualizar esta entrada, pero en conclusión Xata me parece una herramienta muy interesante para profundizar.