En mis últimos blogs de la
serie en desarrollo de la plataforma #XSA, escribí algunos artículos acerca de módulos de node, OData, entre otros conceptos. Hoy, quiero dar un deep dive en este tema y compartir detalles en cómo crear REST APIs. Este blog puede leerse en inglés también
aquí
*Una diferencia en este blog con mis anteriores es que en los anteriores usé la versión SP03, sin embargo, en este estoy usando la versión SP04. Añado también que estoy tratando de evitar la herramienta XS CLI dado a que muchos admins no dan acceso a este tipo de herramientas en algunas compañías.
Reto 1: habilitar el uso del servicio UAA para autenticar los requests en el módulo de node JS.
Solución: es muy simple. Los pasos iniciales fueron documentados anteriormente, pero los incluiré aquí de nuevo.
- Asegúrate de que el archivo mta.yaml tenga sus dependencias (html, db, node, uaa) me refiero a que las secciones de requires/provides estén configuradas correctamente
- Asegúrate que el archivo xs-app.json contenga la autenticidad de tipo "route", y las rutas actuales
- Asumiendo que ambos módulos XSJS compatibility y node js sean soportados en el módulo de node, continúa y has el bootstrap de estos elementos en el archivo server.js
El archivo server.js es la entrada principal (y por default es como se inicia desde el archivo package.json)
- Luego, desde el archivo server.js, el (módulo express) router llama para analizar el request y eventualmente pasar la ejecución correspondiente
- Nota que las rutas definidas en el módulo ui en su archivo xs-app.json deben ser iguales a las rutas definidas en el archivo index.js del módulo tipo node, de otra manera resultará en http 404 "Not found"
Gracias Lucia y Craig por sus ejemplos, me sirvieron y fueron de mucha ayuda.
- En el folder (router) el archivo index.js arriba, también estamos importando un servicio llamado demoSvc.js (la implementación del servicio) donde ejecutaremos el sql o las stored procedures (asumiendo que estas hayan sido creadas en el módulo db y que el usuario tenga el acceso correspondiente para ejecutar dichos artefactos). Durante mis ejercicios, yo creé una tabla cds local, un stored proc e inserté data a la tabla cds.
Una vez que todo esto estaba en orden, era solamente tiempo de ingresar el código nodejs para ejecutar sql o cargar los procedures.
IMO Best practices dicen que tenemos que ejecutar la mayor parte de la lógica en la BD (usando procedures) pero también quiero ver cómo funciona la forma de ejecutar SQL desde el módulo node JS – fue muy fácil en mi opinión.
Si tuviste suerte y continuas sin errores, veamos ahora cómo se llama un SELECT query.
- Nota que el objeto req (contiene una propiedad db que eventualmente se asigna como client) y que es utilizada para ejecutar nuestro sql statement
- La función prepare toma un sql statement como el primer argumento, y un callback regresa errors & statements
- El err now hace saber inmediatamente si no tenemos permisos o si hay algún otro error con nuestro query
- El object statement nos permite ejecutar nuestro query como es mostrado en el siguiente punto
- La función exec toma un parámetro inicial, & un callback, nuevamente, el callback regresa un error y los resultados (que ATM!!! La data si es que algo regresa del query)
- Podemos incluir lógica adicional para manipular la respuesta antes de regresarla al request, o en mi caso, regresar un objeto custom como respuesta
- Finalmente, el objeto res ponse (del request original) se configura para