Artículo

Cómo diseñar APIs en las que los clientes puedan confiar: guía práctica desde el contrato

Cómo diseñar APIs en las que los clientes puedan confiar: guía práctica desde el contrato

Una buena API hace predecible la próxima acción del cliente. Diseña una inscripción a un curso con reintentos seguros, errores útiles y un plan de evolución.

10 min de lecturaIdioma: ES EspañolGratis0 aplausos0 comentarios
Opciones de lectura

Una API es una promesa para otro equipo. Una aplicación móvil, una integración externa o una versión futura de tu frontend pueden depender de su comportamiento. Cuando eso ocurre, cambiar el nombre de un campo ya no es una refactorización local. Por eso conviene definir primero el comportamiento, los fallos y los reintentos; el controlador viene después.

Diseñemos una API de inscripción a cursos. El estudiante consulta un curso, solicita una plaza y recibe un identificador y un estado. El curso puede estar completo; la petición puede repetirse; la red puede fallar después de guardar la inscripción. Esos casos normales revelan la calidad del diseño.

1. Escribe el recorrido y las reglas

El cliente muestra el curso, el estudiante autenticado solicita la inscripción y recibe una respuesta clara. Si hay un tiempo de espera, puede reintentar sin duplicar la inscripción. Establece reglas de servidor: una inscripción activa por estudiante y curso, una ventana de inscripción abierta y capacidad que nunca se excede. Si hay pago, decide cuándo se reserva la plaza y cuándo se libera si falla.

Comparte una solicitud y una respuesta de ejemplo con el equipo cliente antes de programar. Es más fácil corregir un estado ambiguo o un campo ausente en esta fase.

2. Organiza recursos según el trabajo

Solicitud Objetivo Respuesta habitual
GET /v1/courses/{courseId} Leer el curso 200 OK
GET /v1/courses?cursor=...&limit=20 Explorar cursos 200 OK
POST /v1/courses/{courseId}/enrollments Inscribirse 201 Created
GET /v1/enrollments/{enrollmentId} Ver el estado 200 OK
DELETE /v1/enrollments/{enrollmentId} Cancelar si se permite 204 No Content

Si el trabajo continúa en segundo plano, 202 Accepted con un recurso de estado puede representar mejor la realidad. Usa GET para lectura y POST para crear o iniciar una operación. Que ciertos métodos HTTP sean idempotentes no vuelve seguro automáticamente cualquier POST. Evita exponer nombres de controladores o tablas en la ruta pública.

3. Diseña petición y respuesta a la vez

POST /v1/courses/crs_42/enrollments HTTP/1.1
Authorization: Bearer <access-token>
Content-Type: application/json
Idempotency-Key: 9bfa06f8-3eb5-4d5d-85cd-43b02b56bf11

{"source":"course_page"}

Obtén la identidad del estudiante de la credencial validada, no de un learnerId editable en el cuerpo. Una respuesta posible:

HTTP/1.1 201 Created
Location: /v1/enrollments/enr_7f3
Content-Type: application/json

{"id":"enr_7f3","courseId":"crs_42","status":"confirmed","createdAt":"2026-09-29T10:30:00Z"}

Documenta si los ID son opacos, los cambios posibles de estado y qué campos admiten null. No devuelvas la fila completa de la base de datos con notas internas o datos de otros alumnos. Para listas, usa un sobre consistente como data y page.nextCursor; especifica filtros y orden. Un cursor sin orden estable puede omitir o repetir elementos.

4. Convierte los errores en información útil

«Algo salió mal» no indica qué hacer. Distingue un curso cerrado de una sesión caducada, una falta de permiso y un fallo del servidor. RFC 9457 Problem Details ofrece un formato común:

{
  "type": "https://api.example.com/problems/enrollment-closed",
  "title": "Enrollment is closed",
  "status": 409,
  "detail": "This course stopped accepting enrollments."
}

En producción, type debe apuntar a una definición real. Documenta también los errores por campo. No muestres trazas, mensajes SQL ni secretos; conserva diagnósticos en registros seguros con un ID de correlación. Acordad el uso de 401 para autenticación, 403 para permiso, 404 según la política de visibilidad, 409 para conflicto y 429 para límites de frecuencia.

5. Prepara reintentos y concurrencia

El servidor puede confirmar la inscripción y perderse la respuesta. Con Idempotency-Key, el cliente envía una clave única para ese intento; el servidor guarda el resultado y lo devuelve ante la misma clave y petición. Rechaza la clave reutilizada con otro contenido. Define alcance, duración y respuesta. No es una garantía automática de HTTP para POST.

Protege la regla en la base de datos con restricciones adecuadas al ciclo de vida. Si queda una plaza, dos solicitudes simultáneas no deben ocuparla ambas: usa una transacción o reserva segura y una prueba concurrente. Los webhooks y trabajos en cola también pueden repetirse; diseña su procesamiento para ello.

6. Separa autenticación de autorización

La primera responde «¿quién llama?»; la segunda «¿puede acceder a este recurso?». Un token válido no permite leer la inscripción de otro estudiante. Aplica reglas de alumno, docente y administrador en el servidor. No confíes en un rol enviado en el cuerpo. Evita registrar tokens y documenta cómo debe esperar el cliente después de 429, además de si el límite es por usuario, token o cuenta.

7. Documenta, prueba y prepara el cambio

Describe rutas, esquemas, seguridad, respuestas y ejemplos en OpenAPI. Pide a un desarrollador cliente que integre usando solo ese documento: sus dudas mostrarán huecos. Prueba 201, el mismo intento repetido, una clave reutilizada con otra petición, curso completo, acceso indebido, carrera por la última plaza y orden de paginación.

Una ruta /v1 no es por sí sola un plan de versiones. Mantén un registro de cambios, anuncia la retirada de funciones, observa los clientes antiguos y publica una guía de migración. No cambies silenciosamente el significado de un campo. Si agregas pending_payment, considera cómo reaccionarán clientes que solo conocen confirmed y cancelled.

Revisión antes de publicar

¿Entiende el cliente los éxitos y los fallos accionables? ¿Compruebas permisos sobre el recurso? ¿Qué ocurre al repetir o competir dos peticiones? ¿Están claros filtros, orden y paginación? ¿Coincide OpenAPI con el comportamiento? ¿Puedes investigar fallos sin exponer datos privados? ¿Hay plan para cambios?

Una API no inspira confianza porque el caso feliz funcione una vez. La inspira cuando el cliente puede recuperarse de un corte de red, manejar un curso lleno y seguir funcionando tras tu siguiente versión.

Referencias

Artículos destacados

Cómo convertirse en desarrollador de Shopify: de tu primer tema a tu primera aplicación
EditorialES
11 minGratis

Cómo convertirse en desarrollador de Shopify: de tu primer tema a tu primera aplicación

¿Quieres crear tiendas, temas o aplicaciones para Shopify? Elige una especialidad, termina un proyecto pequeño y demuestra tus habilidades con ejemplos reales.

Artículos de ingenieríaGuías de plataforma
0 aplausos
Leer
8 plugins de Claude Code que facilitan el desarrollo en 2026
EditorialES
5 minGratis

8 plugins de Claude Code que facilitan el desarrollo en 2026

Un asistente de programación funciona mejor cuando tiene el contexto adecuado. Un plugin puede consultar documentación actual, seguir símbolos del código o probar una página en el navegador. No hace falta instalarlo todo: empieza por las herramientas que resuelven problemas habituales en tu proyecto. ## Cómo empezar Escribe `/plugin` en Claude Code y abre **Discover**. También puedes usar `/plugin install NAME@claude-plugins-official`. Si no aparece el catálogo, añade `/plugin marketplace add anthropics/claude-plugins-official`. Lee los requisitos de cada plugin: algunos necesitan configuración adicional. ## 1. Context7: documentación relevante para tu versión Context7 consulta documentación y ejemplos específicos de una versión mediante un servicio MCP. Es útil al actualizar dependencias: «Comprueba la documentación actual de Laravel antes de proponer este cambio». Confirma la versión instalada y verifica los ejemplos decisivos en la fuente. `/plugin install context7@claude-plugins-official` ## 2. PHP LSP: orientarte en Laravel El servidor de lenguaje para PHP aporta navegación entre definiciones y referencias, además de diagnósticos. Pide seguir una llamada desde el controlador hasta el servicio, el trabajo en cola y el modelo. Sigue las instrucciones para configurar Intelephense. `/plugin install php-lsp@claude-plugins-official` ## 3. TypeScript LSP: comprender el frontend En React, Next.js o Vue con TypeScript, localizar los usos de un tipo o una propiedad compartida evita cambios a ciegas. Después, ejecuta la comprobación de tipos y las pruebas de tu proyecto. `/plugin install typescript-lsp@claude-plugins-official` ## 4. Code Review: revisar antes del pull request Al terminar una función, solicita una revisión del diff con errores concretos, casos límite y pruebas que falten. En un endpoint de envío de respuestas, revisa duplicados, permisos y concurrencia. Comprueba personalmente cada hallazgo. `/plugin install code-review@claude-plugins-official` ## 5. Security Guidance: señales durante la edición Este plugin avisa sobre patrones de riesgo y examina cambios desde una perspectiva de seguridad. Úsalo al modificar autenticación, subidas de archivos o autorización de API. Es una ayuda, no una garantía ni un sustituto de auditorías y revisión humana. `/plugin install security-guidance@claude-plugins-official` ## 6. Playwright: comprobar la experiencia real Una compilación correcta no asegura que el menú móvil o un formulario funcionen. Con Playwright puedes pedir que se pruebe el inicio de sesión, las validaciones o el selector de idioma en el navegador. Para operaciones que escriben datos, utiliza un entorno y una cuenta de pruebas. `/plugin install playwright@claude-plugins-official` ## 7. Frontend Design: mejorar una interfaz Describe a quién va dirigida la página, sus componentes existentes, los requisitos de accesibilidad y la acción principal. Revisa el resultado en móvil y escritorio, y ajusta lo que no encaje con tu sistema de diseño. `/plugin install frontend-design@claude-plugins-official` ## 8. CLAUDE.md Management: conservar instrucciones útiles Un `CLAUDE.md` breve puede indicar dónde están las pruebas, cómo ejecutarlas y qué reglas arquitectónicas seguir. El plugin ayuda a revisar y mejorar ese archivo. Conserva instrucciones concretas y elimina las obsoletas. `/plugin install claude-md-management@claude-plugins-official` ## Una selección inicial sencilla Para Laravel, prueba **PHP LSP** y **Context7**. Para Next.js, empieza con **TypeScript LSP** y **Playwright**. Añade **Code Review** y **Security Guidance** para cambios delicados. El mejor conjunto es el que de verdad usas, acompañado de tus pruebas y criterio técnico. ## Fuentes oficiales [Claude Code plugins](https://code.claude.com/docs/en/plugins) · [Anthropic marketplace](https://github.com/anthropics/claude-plugins-official).

Artículos de ingenieríaGuías de IA
0 aplausos
Leer
18 minGratis
ES

Detección de objetos con YOLO: Guía práctica completa para desarrolladores

Guía integral para desarrollar con YOLO: conceptos, datos, entrenamiento, evaluación, tiempo real, API de producción, rendimiento, seguridad y entrevistas.

Artículos de ingenieríaGuías de IAAIPythonVision
0 aplausos
Leer

Comentarios

0 comentarios

Todavía no hay comentarios aprobados. Las respuestas nuevas pueden esperar moderación.