Por Francisco Riccio
Publicado en Julio 2017
Introducción
Este artículo está enfocado a explicar cómo podemos implementar servicios RESTful a través Node.js manejando datos ubicados en nuestro Oracle Database 12c; para ello definiré algunos términos con la finalidad de luego utilizarlos en el desarrollo de este artículo.
La implementación se desarrolló en una arquitectura multi-capa separando el Servidor Web con la Base de Datos como a continuación se presenta:
Todo el acceso a los datos se realizó utilizando la librería oracledb el cual se explicará más adelante.
Al final de la implementación tendremos 4 servicios RESTful implementados en Node.js que ejecutarán operaciones SQL sobre una tabla de Productos alojados en Oracle Database 12c.
Los 4 servicios que se implementarán son:
Implementación
La instalación de Node.js 6.1 es simplemente descargar el instalador para el Sistema Operativo correcto y proceder a instalarlo sin mayor dificultar. El Instalador se encuentra en el siguiente url: https://nodejs.org/en/download/
I. Instalación & Configuración de la Librería oracledb:
La librería oracledb es el driver de conexión a la base de datos Oracle para Node.js. Para instalarlo, el Servidor Web debe cumplir con algunos requisitos los cuales son:
Adicional se debe crear las siguientes variables de ambiente. En mi caso, el InstantClient lo instalé en el directorio C:\instantclient:
Una vez que se tenga todos los pre-requisitos creados, procedemos a construir nuestra aplicación que permitirá presentar los servicios RESTful.
II. Construcción del Proyecto
1. Creamos un usuario y la tabla PRODUCTO en la base de datos como a continuación se presenta:
Una vez creada la tabla procedemos con los demás pasos.
2. Creamos una carpeta en el Servidor Windows, en mi caso la he llamado demo.
3. Luego procedemos a cargar las librerías (Express, BodyParser, MethodOverride y oracledb) al proyecto.
Para realizar este punto, debemos crear un archivo llamado package.json donde declararemos las librerías que deseamos instalar, en este caso quedaría así:
Luego ejecutamos el comando npm install y tendremos la siguiente salida:
4. Creamos un módulo específico que se encargará de conectar a la base de datos y ejecutar las operaciones SQL que necesitemos que se realicen.
Este módulo lo llamaremos dao.js y utilizará la librería oracledb para realizar dicho fin.
Explicación del código:
Línea | Explicación |
---|---|
1 | Cargamos la librería oracledb y lo referenciamos con la variable objoracle. |
3-7 | Creamos una variable que almacenará la información de la cadena de conexión de la base de datos Oracle en formato JSON. |
9-19 | La función error nos permitirá devolver un mensaje de error en formato JSON en caso no se pueda establecer la conexión con la base de datos o cumplir con el requerimiento solicitado por la sentencia SQL. |
21 | Creamos una función que encapsulará la lógica de conexión a la base de datos, ejecución de la sentencia SQL y finalmente su desconexión. |
22-23 | Creamos la conexión a la base de datos y de manera asíncrona recibiremos un estado de éxito. |
24 | En caso de conseguir la conexión con la base de datos, se procede a ejecutar la sentencia SQL requerida. Es importante notar que nuestro código soporta bind variables como parte de la sentencia SQL. También se ha especificado que toda sentencia DML se ejecutará con AUTOCOMMIT. Es importante notar que se devolverá el número de registros afectados en caso la sentencia que se desee ejecutar sea una operación DML. |
25-32 | Se evalúa el éxito de la ejecución de sentencia y en caso de ser exitosa se procede a devolver los datos en formato JSON. |
33 | Se procede a cerrar la conexión de la base de datos. |
La librería oracledb puede ser utilizada desde versiones de Node.js 4 y se encuentra disponible en:
https://github.com/oracle/node-oracledb
En la siguiente url podemos obtener información completa de todas las funciones disponibles por la librería:
https://github.com/oracle/node-oracledb/blob/master/doc/api.md
En ella podemos apreciar que la librería brinda un buen soporte con la base de datos.
Entre sus principales características podemos resaltar las siguientes:
5. Procedemos a crear el módulo principal que se encargará de crear el Servidor Web y presentar los servicios RESTful. Nuestro módulo se llamará app.js.
Explicación del código:
Línea | Explicación |
1-5 | Cargamos las librerías: express, body-parser, method-override y nuestro módulo dao previamente creado. |
7-9, 11,46 |
Enlazamos algunas funciones y variables a nuestra variable app. |
13-44 | Recibimos el requerimiento enviado por GET y deberá recibirse una variable llamada “opc” cuyo valor debe estar entre 1 a 4. Si la variable opc tiene el valor de:
|
48-50 | Se iniciará el Servidor Web publicando los servicios por el puerto 3000 tcp/ip. |
6. Iniciar el Servidor Web.
node app.js
III. Probar los Servicios RESTful.
1. Probaremos que si no es ingresada la variable opc o su valor no está comprendido entre 1 y 4, se enviará un mensaje indicando que no es una opción válida en formato JSON.
2. Listamos todos los productos registrados.
Se adjunta la salida del servicio RESTful y el resultado de la consulta en la base de datos.
3. Listamos la información de un producto específico.
4. Registramos un nuevo Producto.
5. Eliminamos el Producto con código 41 de la Base de Datos.
Con esta última prueba podemos concluir el trabajo de implementación.
Nuestro Servidor Web en Node.js tendrá la siguiente salida después de ejecutar las pruebas previamente indicadas:
Conclusión
Oracle ha desarrollado la librería oracledb que nos permite trabajar de manera transparente desde Node.js toda la comunicación con la base de datos Oracle incluyendo sus nuevas funcionalidades de la versión 12c como por ejemplo: el uso del tipo de dato JSON, dando la posibilidad de crear aplicaciones ligeras, escalables y con mejor desempeño a través de un Oracle Database 12c en este caso.
Ing. Francisco Riccio. Es un Cloud Architect en IBM Perú e instructor de cursos oficiales de certificación Oracle. Está reconocido por Oracle como un Oracle ACE y certificado en productos de Oracle Application & Base de Datos.
Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.