API RESTful con NodeJS

A continuación podemos ver una simple Api RESTful con NodeJS.

Esto es una continuación del post: API RESTful

A nivel de archivos encontramos los siguientes

  • index.js -> este posee la definición de las rutas y la inicilización del servidor.
  • package.json -> posee las especificaciones de la aplicación y los node-modules necesarios
  • endpoitns/personas.js -> en este se encuentran cada uno de las operaciones sobre personas.
  • models/personas.js -> en este archivo se encuentra un array de objetos para ser usados como datos del sistema.

Archivo: index.js

Como en toda aplicación con NodeJS iniciamos con incluyendo los paquetes necesarios

  • express: framework para realizar aplicaciones Web
  • body-parser: utilizado para interpretar los datos recibidos en el request de la petición

Al trabajar con express necesitamos generar la aplicación y configurarla

const app = express();

// configuro la api
app.use(bodyParser.urlencoded({ extended:false}));
app.use(bodyParser.json());

Posteriormente incluimos los endpoint para cada petición

//incluyo los endpotins
const personas = require('./endpoint/personas');

Posteriormente definimos las rutas de nuestra api

app.get('/personas', personas.GetPersonas);
app.get('/personas/:id', personas.GetPersonaById);
app.post('/personas', personas.SavePersona);
app.put('/personas/:id', personas.EditPersona);
app.delete('/personas/:id',personas.DelPersona);

Donde en cada ruta tenemos que definir

  • El metodo http, los cuales estamos usando get, post, put y delete
  • Luego la ruta a implementar, en el caso de aquellas donde necesitamos recibir parámetros los indicamos con «:» antes del nombre a indicarle
  • Finalmente la función/handler dentro del endpoint a invocar para esa ruta

Una vez definidas las rutas, hacemos que express escuche el puerto.

app.listen(port,()=>{
     console.log("ApiREST runnint on port:"+port);
})

Archivo: endpoints/personas.js

En este archivo tenemos las funciones definidas para cada una de las rutas

1.- Listar todos los datos

function GetPersonas(req, res){
    res.set('Content-Type', 'application/json');
    res.send(JSON.stringify(data.Sample));
}

Cada función definida para cada ruta debe tener los parámetros

  • Response (res): Este es utilizado para responder al cliente que consume el endpoint, del response utilizamos las siguientes funciones, en los ejemplos desarrollados
    • set(): para setear el tipo de dato de retorno
    • send(): para mandar la respuesta
    • sendStatus(): respondemos con el estado HTTP, utilizado los codigos definidos en el protocolo (link)
  • Request (req): Por medio de este obtenernos los datos enviados

1.- Retornar los datos solicitados

function GetPersonaById(req, res){
   let personaId = req.params.id;
   let respuesta = data.Sample.find(sample => sample.Id === personaId);
   if (respuesta == null){
      res.sendStatus(404);
   }else{
      res.set('Content-Type', 'application/json');
      res.send(JSON.stringify(respuesta));
  }
}

Con la linea de código req.params.id obtenemos el «id» definido en la ruta por lo cual podemos obtener el id indicado en /personas/3

En el siguiente repositorio de GitHub se tienen la APIRest completa <link>, el resto del código es fácil de interpretar por eso no lo escribo todo acá, puesto que es para que sea como una referencia mínima al como codificar la API