Guía para definir contrato de API y generar documentación automática con OpenAPI y Swagger
Por Kevin Marcondes · Publicado el · Actualizado el · 8 min de lectura
Esta guía para definir el contrato de una API y generar documentación automática con OpenAPI y Swagger muestra, paso a paso, cómo estandarizar endpoints, errores y seguridad. Verás la estructura de OpenAPI 3.x, modelos de respuesta, estrategias de versionado y cómo publicar documentación viva sin esfuerzo manual.
Contrato de API: concepto y beneficios prácticos
El contrato de API es la especificación que describe con precisión cómo interactúan clientes y servidores. Detalla endpoints, payloads, errores y requisitos de seguridad. Contar con un contrato reduce ambigüedades y acelera la integración entre equipos y sistemas.
Con un contrato claro evitas rupturas al lanzar nuevas versiones. También obtienes una base para validar requests y responses de forma automática. Herramientas pueden generar mocks, clientes y servidores a partir del contrato, reduciendo retrabajo.
La documentación deja de ser un documento estático. Con OpenAPI, la documentación acompaña al código. Los cambios se convierten en pull requests revisables, mejorando la gobernanza del ecosistema de APIs.
- Menos retrabajo entre backend y consumidores.
- Estandarización de errores y códigos HTTP.
- Validación automática de esquemas en CI/CD.
- Generación de clients/SDKs y mocks a partir del contrato.
OpenAPI en resumen: versiones, estructura y buenas prácticas
OpenAPI 3.x es el estándar más usado para describir APIs HTTP. Una especificación típica contiene metadatos, servidores, paths, operaciones, schemas y componentes reutilizables. Puede escribirse en YAML o JSON.
Organiza el documento usando components para schemas, parámetros, respuestas y headers. Esto evita duplicación. Mantén ejemplos reales de entrada y salida. Buenos ejemplos son parte esencial de la documentación viva.
Adopta convenciones de nombres. Usa camelCase o snake_case de forma consistente. Define formatos para fechas, números e identificadores. Documenta límites, paginación y ordenación para cada recurso.
- Usa components/schemas para modelos reutilizables.
- Incluye examples y ejemplos negativos (errores).
- Centraliza enumeraciones y mensajes estándar.
- Adopta tags para agrupar endpoints por dominio.
Modelando endpoints REST: recursos, verbos y status
Piensa en recursos antes que en endpoints. Refleja entidades y relaciones del dominio. Usa sustantivos en plural e identifica recursos por IDs. Mantén rutas previsibles y verbos HTTP coherentes con la acción.
La idempotencia importa. GET, PUT y DELETE deben ser idempotentes. POST crea recursos. PATCH aplica cambios parciales. Define paginación y filtros vía query parameters. Documenta límites y ordenación aceptados.
Si estás evaluando otro estilo, como GraphQL, consulta un comparativo GraphQL vs REST para entender los impactos en contratos e integraciones.
- GET /orders, POST /orders, GET /orders/{id}.
- Usa 200/201 para éxito, 202 para procesamiento asíncrono.
- Prefiere 204 cuando no hay cuerpo en la respuesta.
- Usa 400 para validación, 401/403 para autenticación y autorización.
- Propaga 429 cuando haya rate limiting.
Schemas, validaciones y errores estandarizados
OpenAPI utiliza JSON Schema para describir estructuras de datos. Define tipos, formatos, campos obligatorios y límites. Usa enums para valores controlados. Explica campos de fecha, monedas e identificadores con descripciones claras.
Estandariza el modelo de error. Una aproximación es inspirarse en Problem Details (problem+json). Estructura campos como type, title, detail, code, traceId y violations para errores de validación.
Incluye ejemplos de errores por escenario: validación, lógica de negocio y downstream. Documenta códigos específicos por regla de negocio. Esto ayuda a front-ends e integraciones a tratar fallos de forma consistente.
- Describe rangos numéricos con minimum/maximum.
- Marca campos obligatorios en required.
- Usa oneOf/anyOf para variaciones de payload.
- Incluye pattern para validar formatos personalizados.
Autenticación, autorización y versionado
Modela securitySchemes en OpenAPI. Describe OAuth2, API Keys o mTLS según corresponda. Documenta scopes, flujos de autorización y headers. Indica qué operaciones requieren autenticación.
Para políticas de seguridad más detalladas, consulta el guía de APIs seguras con OAuth2 y rate limiting que aborda requisitos como scopes mínimos, límites por cliente y buenas prácticas de rotación de credenciales.
Planifica el versionado desde el inicio. Define cómo se representarán las versiones, plazos de deprecación y reglas de compatibilidad. Documenta breaking changes y caminos de migración para los consumidores.
- Estrategias de versión: URL (/v1), header (Accept-Version) o media type (application/vnd.suaapi+json;v=1).
- Estandariza mensajes de deprecación y sunset headers.
- Separa permisos por scopes y documenta por operación.
Documentación automática: Swagger UI y alternativas
Con un archivo OpenAPI puedes publicar documentación automática. Swagger UI renderiza endpoints, parámetros y ejemplos, y permite ejecutar llamadas. Otras opciones generan UIs navegables a partir del mismo contrato.
Elige la herramienta considerando facilidad de hospedaje, soporte de temas, búsqueda, versiones múltiples y try‑it‑out. A continuación, un comparativo objetivo para orientar la decisión.
| Herramienta | Origen del esquema | Funciones de UI | Cuándo usar |
|---|---|---|---|
| Swagger UI | OpenAPI 3.x | Try‑it‑out, temas simples, hospedaje estático | Inicio rápido, documentación interactiva básica |
| ReDoc | OpenAPI 3.x | Navegación en árbol, diseño limpio, búsqueda | Documentación legible para contratos grandes |
| Stoplight Elements | OpenAPI 3.x | Try‑it‑out, navegación rica, theming | Portales con diseño más avanzado |
| Redocly | OpenAPI 3.x | Portal completo, versiones múltiples, plugins | Gobernanza y documentación enterprise |
| Postman Docs | OpenAPI 3.x/Collections | Ejemplos ejecutables, entorno Postman | Equipos que ya usan collections de Postman |
Integrando el contrato al flujo: CI/CD, mocks y tests
Adopta contract‑first cuando sea posible. El contrato guía la implementación y facilita el alineamiento. En code‑first, genera y valida el OpenAPI en la pipeline. Lo esencial es mantener el contrato como fuente de verdad revisada por pull requests.
Automatiza chequeos en CI/CD: lint de OpenAPI, validación de ejemplos, compatibilidad retroactiva y generación de artefactos. Integra con pipelines como el descrito en CI/CD con GitHub Actions.
Incluye tests de contrato y mocks para consumidores. Simula respuestas según el OpenAPI. En las revisiones de código, evalúa seguridad y errores. Cuando sea necesario, realiza una auditoría de código enfocada en endpoints críticos.
- Lint de OpenAPI (nomenclatura, schemas y ejemplos).
- Validación request/response en pruebas de integración.
- Test de compatibilidad: detectar breaking changes.
- Generación automática de SDKs por lenguaje.
- Publicación de la doc en cada PR y entorno.
Paso a paso inicial y checklist de gobernanza
Comienza pequeño pero completo. Elige un dominio, mapea recursos y versiones, escribe contratos con ejemplos, publica la doc e integra validaciones al CI. Con feedback, evoluciona los estándares y compila un style guide interno.
Formaliza la gobernanza: revisión por pares, convenciones de nombres, catálogo de APIs, ciclo de deprecación y política de compatibilidad. El objetivo es previsibilidad para los consumidores y seguridad para el equipo.
- Define objetivos de negocio de la API.
- Mapea recursos, relaciones y límites.
- Elige estilo de paginación y ordenación.
- Escribe el OpenAPI con components reutilizables.
- Modela autenticación y scopes por operación.
- Estandariza errores y códigos de negocio.
- Publica la documentación automática.
- Automatiza lint, validación y compatibilidad.
Preguntas frecuentes
Contrato-first o code-first: ¿cuál elegir?
Contrato-first favorece el alineamiento entre equipos al definir requisitos antes de implementar; facilita la generación de mocks, SDKs y la validación automática. Code-first es útil cuando ya existen endpoints y necesitas derivar el OpenAPI desde el código. En ambos enfoques, trata el contrato como fuente de verdad, revisa cambios por pull requests e integra validaciones en CI para mantener gobernanza.
¿Cómo mantener OpenAPI sincronizado con el código?
Mantén el archivo OpenAPI en el repositorio junto al código y publica la documentación en cada commit o PR. Automatiza linting, validación de ejemplos y checks de compatibilidad en la pipeline; bloquea despliegues que rompan el contrato sin versionado documentado. Genera mocks, clientes y artefactos desde el contrato y valida requests/responses en pruebas de integración.
¿OpenAPI funciona con GraphQL o gRPC?
OpenAPI describe APIs HTTP en estilo REST; GraphQL y gRPC usan sus propios formatos (SDL/introspección y Protobuf/.proto). Puedes documentar gateways HTTP que expongan o traduzcan GraphQL o gRPC, pero el contrato raíz de cada tecnología sigue siendo su estándar propio. OpenAPI no sustituye nativamente esos formatos.
¿Cómo lidiar con breaking changes en la API?
Evita eliminar campos o cambiar significados en producción; cuando un cambio sea incompatible, publica una nueva versión y documenta claramente las modificaciones. Define plazos de deprecación, mensajes y headers de sunset, reglas de compatibilidad y guías de migración. Comunica cambios con antelación y ofrece un periodo razonable de compatibilidad para los consumidores.
¿Necesito Swagger para usar OpenAPI?
No. Swagger UI es una opción popular para renderizar y probar OpenAPI, pero existen alternativas como ReDoc o portales dedicados. Lo esencial es mantener el archivo OpenAPI actualizado, publicar la documentación accesible a los consumidores con ejemplos y try-it-out cuando aplique, y alinear la versión de la documentación con el ciclo de releases.
¿Quieres estandarizar contratos y publicar documentación viva?
Si necesitas dejar de improvisar y adoptar OpenAPI con documentación automática, podemos analizar tu escenario y trazar un plan práctico de implementación.
Hablar sobre tu contrato de APIVer también
- Guía: checklist de pre‑deploy y plan de rollback rápido para aplicaciones PHP en producción
- Checklist de seguridad para pipelines CI/CD con runners self‑hosted y gestión de secretos
- Guía: centralización de logs con Fluentd y Elasticsearch para aplicaciones PHP en VPS
- Guía: organizar migraciones y rollbacks en PostgreSQL para equipos pequeños