Uno de los aspectos más visibles y determinantes en una API REST es cómo nombras tus endpoints y recursos. Aunque puede parecer algo menor, una mala convención puede llevar a confusión, errores de integración, o incluso a violar principios de diseño RESTful.
Este artículo te enseña las mejores prácticas y convenciones de naming para crear APIs más limpias, consistentes y mantenibles.
¿Qué es un recurso en REST?
En REST, los datos o entidades que se exponen a través de una API se llaman recursos. Un recurso puede ser:
- Una entidad (ej. un usuario, producto, factura)
- Una colección de entidades
- Una relación entre recursos (comentarios de un post, productos de una orden)
Cada recurso se representa mediante una URL única.
Principios fundamentales para nombrar endpoints REST
Usa sustantivos, no verbos
GET /usuarios, no GET /obtenerUsuarios
POST /facturas, no POST /crearFactura
Nombres en plural para colecciones
GET /clientes
POST /pedidos
Refleja que estás accediendo a un conjunto de recursos
Identificadores como parte de la URL
GET /clientes/123
PUT /productos/456
El ID representa un único recurso
Anida relaciones jerárquicas con cuidado
GET /usuarios/42/compras → todas las compras del usuario 42
GET /ordenes/99/productos → productos en una orden específica
Evita profundidad innecesaria
Mal: /sistema/usuarios/listado/activos
Bien: /usuarios?estado=activo
Verbos HTTP y su uso esperado
| Verbo | Propósito | Ejemplo |
|---|---|---|
| GET | Obtener datos | GET /usuarios |
| POST | Crear un nuevo recurso | POST /usuarios |
| PUT | Reemplazar un recurso existente | PUT /usuarios/123 |
| PATCH | Modificar parcialmente un recurso | PATCH /usuarios/123 |
| DELETE | Eliminar un recurso | DELETE /usuarios/123 |
❗ No pongas el verbo en la URL. El verbo ya está en el método HTTP.
Cómo nombrar acciones no CRUD
Opciones recomendadas:
Subrecurso con verbo como sustantivo
POST /usuarios/42/activaciones → activa al usuario 42
POST /ordenes/88/cancelaciones → cancela la orden 88
Ruta de acción clara
POST /usuarios/42/activar
POST /ordenes/88/marcar-como-pagada
No abuses de estas rutas: si tu API tiene muchas acciones "verbales", puede indicar que necesitas rediseñar los recursos.
Convenciones para filtros, paginación y ordenamiento
Filtros:
GET /productos?categoria=ropa&stock=disponible
Paginación:
GET /clientes?page=2&limit=20
Ordenamiento:
GET /articulos?sort=-fecha
Usa
-campopara orden descendente. Esto es compatible con muchas librerías frontend.
Convenciones para respuestas anidadas
GET /ordenes/10/productos
→ Lista todos los productos de la orden 10.
GET /usuarios/5/compras/17
→ Obtiene una compra específica del usuario 5.
Evita hacer anidamientos innecesarios si los recursos no dependen jerárquicamente.
Nombres comunes para endpoints útiles
| Endpoint | Descripción |
|---|---|
/me |
Información del usuario autenticado |
/status o /health |
Estado general del sistema (monitoring) |
/login, /logout |
Autenticación básica |
/search |
Búsqueda avanzada o global |
/webhooks |
Endpoints de integración con terceros |
Qué evitar
❌ /getAllUsers, /createInvoice → no uses verbos en la ruta
❌ /api/v1/v1/usuarios → no repitas versión o prefijos innecesarios
❌ /cliente/123/factura/1/detalle/4/campo/5 → evita profundidad excesiva
❌ /users?id=123 → si el ID está en el query, usa mejor /users/123
Usa kebab-case o snake_case en los parámetros y camelCase en los campos del JSON
En las URLs y parámetros de query, se recomienda usar kebab-case (campo-con-guiones) o snake_case (campo_con_guion_bajo), ya que son más legibles y compatibles con navegadores y herramientas CLI.
En el cuerpo del JSON (request o response), se recomienda usar camelCase, que es el estándar en JavaScript y la mayoría de lenguajes frontend.
Ejemplo correcto:
GET /usuarios?ordenar-por=fecha_registro
JSON de respuesta:
{
"id": 123,
"nombreCompleto": "Javier Padrón",
"correoElectronico": "javier@example.com"
}
Evita mezclar estilos en el mismo lugar (por ejemplo, no uses snake_case en el JSON si tu equipo usa camelCase).
Usa un idioma consistente en toda tu API
Elegir un idioma para tu API (español o inglés) y mantenerlo consistente es crucial para evitar confusión y errores.
Evita mezclar esto:
GET /clientes?status=active
Mejor opción:
GET /clientes?estado=activo
O bien, todo en inglés:
GET /customers?status=active
Lo importante no es el idioma en sí, sino que toda la API hable el mismo lenguaje, desde los endpoints hasta los nombres de campos y errores.
Conclusión
Nombrar bien los endpoints y recursos REST no es una cuestión estética: es una práctica esencial para construir APIs que sean claras, predecibles, fáciles de documentar y de usar por otros equipos.
Sigue estas convenciones y estarás facilitando la vida a todos quienes consumen tu API: desde frontends, apps móviles, hasta integradores externos.
