Construcción de una API REST con Node.js y Express

243

Node.js es una plataforma popular para construir aplicaciones del lado del servidor, y Express es un marco web minimalista que facilita el desarrollo de aplicaciones web y APIs. En este post, aprenderás a construir una API RESTful utilizando Node.js y Express. Exploraremos cómo configurar un proyecto, definir rutas, y manejar solicitudes HTTP.

Desarrollo del tema

Configuración del Proyecto

Para comenzar, necesitamos crear un nuevo proyecto de Node.js e instalar Express. Abre tu terminal y ejecuta los siguientes comandos:

mkdir my-api
cd my-api
npm init -y
npm install express

Creación del Servidor

Crea un archivo index.js en la raíz del proyecto y configura un servidor básico con Express.

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hola Mundo!');
});

app.listen(port, () => {
  console.log(`Servidor escuchando en http://localhost:${port}`);
});

Definición de Rutas

Definiremos algunas rutas básicas para nuestra API. Por ejemplo, una ruta para obtener todos los usuarios y otra para obtener un usuario por ID.

const users = [
  { id: 1, name: 'Juan' },
  { id: 2, name: 'Ana' },
  { id: 3, name: 'Carlos' }
];

app.get('/users', (req, res) => {
  res.json(users);
});

app.get('/users/:id', (req, res) => {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (!user) return res.status(404).send('Usuario no encontrado');
  res.json(user);
});

Manejo de Solicitudes POST

Para manejar solicitudes POST, necesitamos usar middleware para analizar el cuerpo de las solicitudes. Agregaremos un nuevo usuario a la lista.

app.use(express.json());

app.post('/users', (req, res) => {
  const newUser = {
    id: users.length + 1,
    name: req.body.name
  };
  users.push(newUser);
  res.status(201).json(newUser);
});

Manejo de Solicitudes PUT y DELETE

También podemos definir rutas para actualizar y eliminar usuarios.

app.put('/users/:id', (req, res) => {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (!user) return res.status(404).send('Usuario no encontrado');

  user.name = req.body.name;
  res.json(user);
});

app.delete('/users/:id', (req, res) => {
  const userIndex = users.findIndex(u => u.id === parseInt(req.params.id));
  if (userIndex === -1) return res.status(404).send('Usuario no encontrado');

  const deletedUser = users.splice(userIndex, 1);
  res.json(deletedUser);
});

Ejemplo Completo

A continuación, un ejemplo completo de nuestra API RESTful con todas las rutas definidas.

const express = require('express');
const app = express();
const port = 3000;

app.use(express.json());

const users = [
  { id: 1, name: 'Juan' },
  { id: 2, name: 'Ana' },
  { id: 3, name: 'Carlos' }
];

app.get('/', (req, res) => {
  res.send('Hola Mundo!');
});

app.get('/users', (req, res) => {
  res.json(users);
});

app.get('/users/:id', (req, res) => {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (!user) return res.status(404).send('Usuario no encontrado');
  res.json(user);
});

app.post('/users', (req, res) => {
  const newUser = {
    id: users.length + 1,
    name: req.body.name
  };
  users.push(newUser);
  res.status(201).json(newUser);
});

app.put('/users/:id', (req, res) => {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (!user) return res.status(404).send('Usuario no encontrado');

  user.name = req.body.name;
  res.json(user);
});

app.delete('/users/:id', (req, res) => {
  const userIndex = users.findIndex(u => u.id === parseInt(req.params.id));
  if (userIndex === -1) return res.status(404).send('Usuario no encontrado');

  const deletedUser = users.splice(userIndex, 1);
  res.json(deletedUser);
});

app.listen(port, () => {
  console.log(`Servidor escuchando en http://localhost:${port}`);
});

Conclusión

Crear una API RESTful con Node.js y Express es una tarea sencilla gracias a la flexibilidad y simplicidad de estas herramientas. Con los conceptos y ejemplos cubiertos en este post, ahora tienes las bases para construir tus propias APIs y aplicaciones del lado del servidor.