junio 15, 2014 Uncategorized

Desarrollo de un API REST con MongoDB, NodeJS y Express

En el anterior post analizamos un stack que hoy en día considero muy interesante para el desarrollo de aplicaciones web modernas. En este stack el front-end estaba formado por AngularJS para el desarrollo de la aplicación de escritorio, y por Ionic para el desarrollo de la aplicación móvil. Sin embargo, el back-end podía tener ciertas variantes, en función de las necesidades de la aplicación.

También comentamos la importancia de saber elegir el framework o las herramientas más adecuadas para el desarrollo de nuestros proyectos, ya que éstas nos pueden ofrecer un notable aumento de productividad y nos pueden ayudar a desarrollar aplicaciones robustas.

Sin embargo, considero que para sacar provecho a estos frameworks o herramientas conviene saber qué es lo que hacen internamente. El back-end de nuestro stack, entre otras cosas, nos ofrece un API que se encargará gestionar nuestros datos. En este artículo vamos a analizar cómo crear manualmente un servidor que nos ofrezca un sencillo API. En posteriores artículos veremos cómo podemos utilizar herramientas que nos ayudarán a desarrollar nuestro propio servidor de forma mucho más rápida, robusta y con más funcionalidades que si desarrollamos nuestro propio API desde cero.

 

Objetivo

El objetivo de este artículo es desarrollar un API REST muy sencillo con NodeJS y Express con el fin de mostrar lo sencillo, aunque tedioso, resulta esta tarea. El API simplemente permitirá insertar mensajes en una colección MongoDB y recuperar un listado con todos los mensajes existentes en la colección.

Se puede descargar el código fuente desde la siguiente ubicación:

GitHub Source Code

O se puede clonar y arrancar la aplicación ejecutando las siguientes instrucciones desde la línea de comandos:

A continuación se explica cómo desarrollar el API desde cero.

 

Instalación de paquetes NodeJS

El primer paso que vamos a hacer es crear y entrar en el directorio en el que vamos a desarrollar nuestro proyecto. Una vez dentro de nuestro directorio de trabajo instalaremos con npm los siguientes paquetes:

  • expressnpm install express. express es el framework más popular en Node para desarrollar aplicaciones web.
  • express-generatornpm install -g express-generator. Si no lo tenemos instalado ya, tendremos que instalarlo globalmente. express-generator lo utilizaremos para generar rápidamente el esqueleto de nuestra apliación.
  • mongoosenpm install mongoose –save. Finalmente instalaremos mongoose que es el ORM que utilizaremos para acceder a nuestra base de datos MongoDB.

En resumen, ejecutaremos los siguientes comandos dentro de nuestro directorio de trabajo para instalar los paquetes que necesitamos:

 

Generar la aplicación

Una vez tenemos instalados todos los paquetes que necesitamos, lo que vamos a hacer es generar nuestra apliación express. Estando dentro de nuestro directorio de trabajo simplemente ejecutamos el comando express y éste generará la estructura de nuestra aplicación.

A continuación tenemos que instalar los paquetes que necesita express, para lo que ejecutamos la instrucción npm install.

Finalmente, arrancamos nuestra aplicación, ejecutando el comando npm start.

En resumen, desde nuestra consola ejecutaremos los siguientes comandos para generar y ejecutar nuestra aplicación web:

Si una vez arrancado nuestro servidor accedemos a la dirección http://localhost:3000 la aplicación nos mostrará una página de bienvenida a express.

Opcionalmente, como nuestro servidor lo estamos desarrollando para gestionar un API, podemos eliminar los ficheros que no necesitamos y  que los ha creado el generador de express para servir páginas web: podemos eliminar el contenido del directorio public y podemos eliminar el directorio views.

 

Conexión con la base de datos

Para conectarnos a la base de datos creamos el directorio db y dentro de este directorio creamos el fichero index.js. En este fichero simplemente creamos la conexión a la base de datos (la cadena de conexión deberíamos almacenarla en un fichero de configuración, pero por simplificar y no alargar el artículo la definimos directamente en el código):

Posteriormente modificaremos el fichero app.js para establecer la conexión con la base de datos (líneas 7 y 13):

 

Crear las entidades

A través de Mongoose vamos definir el esquema de nuestras entidades. En este ejemplo sólo vamos a tener una entidad lo más sencilla posible llamada Message. En nuestro directorio base de trabajo vamos a crear el directorio models, y dentro de éste vamos a crear el fichero message.js:

 

Crear los controladores

En nuestro directorio base de trabajo vamos a crear el directorio controllers, y dentro de éste vamos a crear el fichero message.js. En el controlador es donde vamos a definir las acciones que se van a poder realizar a través del API con nuestra entidad. En este caso, con el fin de simplicar, sólo vamos a definir dos acciones:

  • list: devuelve un listado de todos los mensajes almacenados en nuestra base de datos, sin ningún filtro.
  • create: Inserta un nuevo mensaje en la base de datos.

 

Crear las rutas

En nuestro directorio base de trabajo vamos a crear el directorio routes, y dentro de éste vamos a crear el fichero message.js. En este fichero vamos a definir los métodos del controlador que se van a ejecutar en función de la petición realizada por nuestra aplicación web:

 

Finalmente, modificaremos el fichero app.js para agregar las rutas que hemos definido en el fichero anterior (líneas 6 y 14):

Probar el API

Finalmente sólo nos falta probar que nuestro API funciona correctamente. Lo correcto sería probarlo mediante una batería de tests, utilizando el paquete superagent, por ejemplo, pero como el objetivo de este artículo simplemente es ver cómo se desarrolla el API, no vamos a explicar cómo desarrollar los test.

Manualmente podemos probar nuestro API mediante una extensión para Chrome llamada POSTMAN. La primera vez que hagamos un GET de messages el API nos devolverá una colección de mensajes vacía:
blog-ch1-empty-collection

Si queremos agregar un mensaje nuevo, tenemos que utilizar el método POST y enviar como parámetros el mensaje que queremos crear:

blog-ch1-post

Finalmente, si volvemos a consultar la colección, utilizando nuevamente el método GET, obtendremos una lista de objetos JSON que contendrá únicamente el mensaje que hemos agregado anteriormente:

blog-ch1-collection

Conclusión

Hemos visto que la creación de un API con NodeJS y Express sin la utilización de ningún otro framework específico es un proceso sencillo aunque tedioso. Hay muchas características que necesita implementar un API y que no hemos tratado en este artículo, pero que conllevarían más o menos tiempo desarrollarlas, como pueden ser las relaciones entre entidades, la gestión de la autenticación, la gestión de la autorización, etcétera.

En siguientes artículos veremos cómo podemos abordar el desarrollo de un API mediante la utilización de frameworks o herramientas que nos van a ayudar a ser más productivos.

 

  1. […] el artículo anterior explicamos cómo desarrollar un API REST con MongoDB, NodeJS y Express desde cero. Vimos que desarrollar un API desde cero es un proyecto sencillo aunque puede resultar […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Back to top