Creando una API REST con JSON Server y Faker.js

Introducción

Actualmente cualquier programador que necesite obtener datos para su aplicación, la mayoría de las ocasiones las realizara mediante llamadas a un API REST. De hecho, a día de hoy no existe un proyecto por muy pequeño que sea que no disponga de una API REST para la consulta, modificación, etc.. de los datos.

Una tarea bastante común para cualquier programador es simular un servicio REST, para entregar algunos datos en formato JSON a una aplicación y comprobar que todo funciona correctamente.

Para crear un API REST podemos montar un servidor back-end usando cualquiera de las tecnologías actuales como NodeJS, PHP, JAVA, C#, etc…

El problema de montar este tipo de back-end es que muchas veces por falta de tiempo, recursos o conocimientos no se hace correctamente y eso acaba afectando al resultado final de nuestra aplicación.

Creando nuestra API REST

En esta ocasión vamos a usar JSON Server, que es un proyecto que te ayudara a configurar una API REST con operaciones CRUD de forma rápida y sencilla.

En la url https://github.com/typicode/json-server puedes encontrar toda la información del proyecto y el repositorio.

A continuación vamos a configurar el servidor JSON y publicaremos una API REST para probar.

También usaremos la librería llamada faker.js, que se encarga de generar datos falsos.

Para instalar el proyecto usaremos npm con el siguiente comando: npm i -g json-server. En este caso he usado el parámetro -g para instalarlo de forma global y poder ejecutarlo desde cualquier directorio.

Una vez terminada la instalación vamos a crear nuestra «base de datos», que sera un fichero JSON con la estructura que necesitemos para poder simular nuestra API REST.

Para no complicarnos llamaremos al fichero database.json:

database.json

{
  "datos-personales": [
    {
      "id": 1,
      "nombre": "A",
      "edad": 30,
      "sexo": "H"
    }
  ]
}

La estructura JSON que usaremos como «base de datos« consiste en un objeto que tiene un conjunto de datos asignados, y este objeto tiene unas propiedades.

Ahora ejecutaremos el servidor para usar nuestra API REST con el siguiente comando:

json-server –watch database.json.

Como parámetro necesitamos indicar el archivo que contiene nuestra estructura JSON (database.json).

También usaremos el parámetro -watch para que el servidor se inicie en modo escucha, con esto hacemos que el servidor este vigilando los cambios del archivos y actualice la API expuesta.

Ahora si vamos a nuestro navegador y abrimos la url http://localhost:3000 veremos nuestro servidor funcionando y mostrando nuestra API REST y sus endpoints.

En las imágenes anteriores podemos comprobar como se ha cargado nuestro fichero y tenemos nuestra API REST preparada.

Los siguientes endpoints son creados automáticamente por el servidor JSON:

OBTENER / datos-personales
GET / datos-personales/ {id}
POST / datos-personales
PUT / datos-personales/ {id}
PATCH / datos-personales/ {id}
DELETE / datos-personales/ {id}

Si realizas solicitudes POST, PUT, PATCH o DELETE los cambios se guardarán automáticamente en database.json.

Una solicitud POST, PUT o PATCH debe incluir un encabezado application/type:application/json para usar el JSON en el cuerpo de la solicitud, de lo contrario dará como resultado un 200 OK pero sin cambios en los datos.

Con todo funcionando la mejor forma de probarlo es usar postman, que puedes descargarlo en forma de extensión para Google Chrome o instalarlo como aplicación de escritorio.

GET: localhost:3000/datos-personales

GET: localhost:3000/datos-personales/:id

POST: localhost:3000/datos-personales/

DELETE: localhost:3000/datos-personales/1

PUT: localhost:3000/datos-personales/2

Como hemos podido comprobar ya tenemos una API REST completa, funcionando y en apenas 5 minutos.

Si queremos tener una respuesta que sea idéntica a la API REST real o que necesitemos simular, solo deberemos modificar el fichero database.json (o el nombre que queramos), con la respuesta que necesitemos.

Pero, ¿y si necesitamos tener por ejemplo tener 1.000, 10.000 o 1.000.000 de registros?.

Añadiendo datos falsos a nuestra API REST

Sin problemas!!, pues para realizar ese trabajo vamos a usar faker.js, ya que si tenemos que añadir todo eso a mano nos podemos eternizar y no es nada practico.

¿Y que es faker.js?, pues es un generador de datos falsos y lo puedes encontrar en la siguiente url https://github.com/marak/Faker.js/.

Para instalar faker.js usaremos npm con el siguiente comando: npm i faker

Con faker.js instalado solo nos queda crear un pequeño script para NodeJS que añada todos esos registros.

fichero_script_que_genera_datos.js

// database-faker.js
let faker = require('faker');
let generateData = () => {
    let data = []
    for (let id = 0; id < 1000; id++) {
        data.push({
            "id": id,
            "address": faker.address.streetAddress(),
            "latitude": faker.address.latitude(),
            "longitude": faker.address.longitude(),
            "first_name": faker.name.firstName()
        });
    }
    return { "data": data }
}
module.exports = generateData

Ahora desde la consola de comandos en vez de usar el comando json-server –watch fichero.json usaremos el siguiente comando json-server –watch fichero_script_que_genera_datos.js.

Y el resultado de nuestra nueva API REST es el siguiente:

El inicio de la respuesta, y podemos ver que son datos totalmente aleatorios creados por faker.js:

Y el final de la respuesta:

Bien, con esto ya tendríamos nuestro API REST funcionando y de forma muy simple.

Tanto json-server como faker.js, en sus respectivas páginas puedes encontrar el repositorio y toda la documentación necesaria para personalizar a tu gusto o necesidades.