Crear rutas personalizadas en la REST API

Contents

Introducción

En el desarrollo de APIs REST, la definición de rutas es un aspecto fundamental para exponer recursos de forma clara y consistente. Sin embargo, a menudo los requisitos del proyecto exigen endpoints específicos más allá de las convenciones predeterminadas. En este artículo aprenderemos a crear rutas personalizadas, entender sus ventajas y aplicar las mejores prácticas de seguridad y documentación.

Conceptos básicos de REST y enrutamiento

Principios REST

Una API RESTful se basa en los verbos HTTP (GET, POST, PUT, DELETE, etc.) y en la representación de recursos mediante URIs. Cada ruta debe reflejar con precisión la acción y el recurso implicado, manteniendo la consistencia y la legibilidad.

¿Qué es una ruta

Una ruta o endpoint es la combinación de una URI y un método HTTP que procesa la petición y devuelve una respuesta. Las rutas personalizadas surgen cuando necesitamos operaciones especializadas: búsqueda avanzada, filtros complejos, acciones volumétricas o cualquier lógica que se salga del CRUD básico.

Ventajas de las rutas personalizadas

  • Flexibilidad: Permiten adaptar la API a necesidades de negocio específicas.
  • Optimización: Evitan la sobrecarga de lógica en rutas estándar.
  • Claridad: Cada endpoint expresa de forma inequívoca su objetivo.
  • Mantenimiento: Facilitan la modularidad y la escalabilidad.

Cómo definir rutas personalizadas

En Node.js con Express

const express = require(express)
const router = express.Router()

// Ruta para buscar usuarios por rol
router.get(/users/role/:roleId, (req, res) =gt {
const roleId = req.params.roleId
// Lógica de búsqueda…
res.json({ success: true, data: / resultados / })
})

module.exports = router

Más información en la Guía oficial de enrutamiento de Express.

En PHP con Laravel

// routes/api.php
Route::get(/orders/report/{date}, [OrderController::class, dailyReport])

Laravel permite agrupar rutas y aplicar middleware de forma sencilla. Consulta la documentación oficial para más detalles.

En Django REST Framework

from rest_framework.decorators import action
from rest_framework.viewsets import ModelViewSet

class ProductViewSet(ModelViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer

@action(detail=False, methods=[get], url_path=featured)
def featured(self, request):
featured = self.queryset.filter(is_featured=True)
serializer = self.get_serializer(featured, many=True)
return Response(serializer.data)

DRF facilita la creación de rutas especializadas usando @action. Más en Routers y acciones personalizadas.

Buenas prácticas al diseñar rutas personalizadas

  1. Seguir convenciones REST: Usa nombres en plural, recursos bien definidos y verbos HTTP adecuados.
  2. Versionado: Incorpora el número de versión en la URI (/v1/, /v2/).
  3. Evitar URIs demasiado largas: Limita segmentos y params.
  4. Documentar exhaustivamente: Incluye parámetros, ejemplos y códigos de respuesta.
  5. Estandarizar respuestas: Usa estructuras uniformes para errores y datos.

Registro y seguridad de rutas

Autenticación y autorización

  • Protege rutas sensibles con JWT, OAuth2 o middleware de sesión.
  • Valida siempre los params y el body para prevenir inyecciones.
  • Implementa rate limiting para evitar ataques de fuerza bruta.

Documentación de rutas

Una API es tan útil como su documentación. Herramientas como Swagger (https://swagger.io/) o Redoc facilitan la generación de docs interactivas que muestran cada ruta, parámetros, esquemas de respuesta y ejemplos de uso.

Casos de uso avanzados

Requisito Ejemplo de ruta
Búsqueda con múltiples filtros GET /products/searchcategory=5ampprice_min=10ampprice_max=100
Procesar lote de registros POST /items/batch-process
Exportación de datos GET /reports/export/salesdate=2024-06-01

Conclusión

Las rutas personalizadas en una API REST ofrecen una capa extra de precisión y funcionalidad adaptada a las necesidades del negocio. Siguiendo los principios REST, aplicando buenas prácticas de diseño, seguridad y versionado, y documentando cada endpoint, garantizamos una API robusta, mantenible y fácil de consumir.

Fuentes y enlaces



Acepto donaciones de BAT's mediante el navegador Brave 🙂



Deja una respuesta

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