javascript-fastify

Construye APIs super rápidas con Fastify

Fastify es un framework de Node.js que se centra en proporcionar un rendimiento excepcional al construir aplicaciones web, en especial APIs.

Ofrece una serie de características que nos permiten desarrollar aplicaciones escalables y rápidas, con una mínima sobrecarga y una estructura intuitiva.

Entre las características destacadas de Fastify son,

  • Rendimiento de alto nivel: Fastify está diseñado para manejar un gran número de solicitudes por segundo con un uso eficiente de los recursos.
  • Enrutamiento fácil: Permite definir rutas de manera sencilla y clara.
  • Soporte para plugins: Facilita la integración de funcionalidades adicionales mediante un sistema de plugins extensible.
  • Manejo eficiente de errores: Proporciona mecanismos para gestionar errores de manera eficaz y personalizada.
  • Optimización y validación de datos: Incluye herramientas para validar y optimizar datos de solicitudes.

Cómo instalar Fastify

Para comenzar a usar Fastify, debemos instalarlo en nuestro proyecto Node.js. Podemos hacerlo fácilmente mediante npm, el gestor de paquetes de Node.js. Asegurémonos de tener Node.js y npm instalados, y luego ejecutemos el siguiente comando para agregar Fastify a nuestro proyecto:

npm install fastify

Este comando descargará e instalará la biblioteca Fastify en nuestro directorio node_modules y la añadirá a las dependencias de nuestro archivo package.json.

Cómo usar Fastify

Una vez que hemos instalado Fastify, podemos comenzar a utilizarlo para construir nuestra API. A continuación, veremos cómo crear un servidor básico, definir rutas y manejar solicitudes utilizando Fastify.

Crear un servidor básico

Primero, vamos a crear un archivo llamado server.mjs en nuestro proyecto. En este archivo, configuraremos un servidor básico utilizando Fastify:

import Fastify from 'fastify'

const fastify = Fastify({
  logger: true
})

// Ruta GET de ejemplo
fastify.get('/hello', async (request, reply) => {
  reply.type('application/json').code(200)
  return { hello: 'world' }
})

// Ruta POST de ejemplo
fastify.post('/echo', async (request, reply) => {
    return request.body;
});

fastify.listen({ port: 5000 }, (err, address) => {
  if (err) throw err
  // Server is now listening on ${address}
})

En este código:

  • Utilizamos Fastify para crear una instancia del servidor Fastify con soporte para logs.
  • Definimos dos rutas: una ruta GET en /hello que devuelve un saludo simple y una ruta POST en /echo que devuelve el contenido enviado en la solicitud.
  • Finalmente, iniciamos el servidor en el puerto 3000 y mostramos un mensaje en la consola para confirmar que está en funcionamiento.

Manejo de errores

Fastify ofrece un sistema robusto para manejar errores. Podemos capturar errores globales y personalizar las respuestas de error. Aquí hay un ejemplo de cómo definir un manejador de errores global:

fastify.setErrorHandler((error, request, reply) => {
    fastify.log.error(error);
    reply.status(500).send({ error: 'Internal Server Error' });
});

En este ejemplo, estamos capturando todos los errores no manejados y respondiendo con un mensaje de error genérico y un código de estado 500.

Uso de plugins

Fastify cuenta con un sistema de plugins que nos permite extender la funcionalidad del framework. Podemos agregar plugins para manejar validación de datos, autenticación, y mucho más. Por ejemplo, para agregar un plugin que valida el cuerpo de las solicitudes, podríamos hacer lo siguiente:

const Fastify = require('fastify');
const fastify = Fastify({ logger: true });

// Plugin para validación de datos
fastify.register(require('fastify-schema-validation'), {
    // Configuración del plugin
});

// Ruta POST con validación de datos
fastify.post('/register', {
    schema: {
        body: {
            type: 'object',
            required: ['username', 'password'],
            properties: {
                username: { type: 'string' },
                password: { type: 'string' }
            }
        }
    }
}, async (request, reply) => {
    return { message: 'Usuario registrado con éxito' };
});

En este ejemplo, registramos un plugin de validación de esquemas y definimos una ruta POST que valida el cuerpo de la solicitud según un esquema JSON.