Documentación de la API

Esta página cubre los estándares para documentar APIs usando especificaciones OpenAPI en todos los servicios de Decentraland.

Objetivos

Nuestro enfoque de documentación de API garantiza:

  • Estandarización - Especificaciones OpenAPI consistentes en todos los servicios

  • Automatización - Validación, empaquetado y despliegue mediante GitHub Actions

  • Centralización - Toda la documentación de servicios publicada a través de GitBook

  • Propiedad - La documentación vive en el repositorio de cada servicio

  • Accesibilidad - Referencias de API amigables para contribuidores y actualizadas


Estructura del repositorio

Cada repositorio de servicio DEBE incluir un /docs directorio con la siguiente estructura:

/docs
  openapi.yaml        # Fuente de verdad (OpenAPI 3.1)
  openapi.json        # Generado automáticamente en CI para Hugo/renderers
  index.html          # Documentación independiente generada automáticamente (opcional)

Requisitos de archivos

openapi.yaml

  • DEBE ser el archivo fuente canónico

  • DEBE usar la especificación OpenAPI 3.1

  • PUEDE tener un prefijo que identifique el servicio (p. ej., worlds-openapi.yaml)

  • PUEDE dividirse en components/ o examples/ directorios si es necesario

openapi.json

  • Generado automáticamente durante CI/CD

  • Usado por Hugo y otros renderers

  • No editar manualmente

index.html

  • Documentación independiente generada automáticamente

  • Construido usando Redocly

  • Desplegado en GitHub Pages


Estándares OpenAPI

Al escribir openapi.yaml, sigue estas convenciones para asegurar consistencia y claridad.

Resumen del endpoint

DEBE refleja la ruta real del endpoint:

Operation ID

DEBE incluye el nombre del servicio para unicidad global:

Convención de nombres: {serviceName}_{operationDescription}

  • Usa camelCase

  • Sé descriptivo pero conciso

  • Incluye el contexto del método HTTP cuando sea útil (p. ej., createUser, deleteParcel)

Versionado

DEBE usa versionado semántico (MAJOR.MINOR.PATCH) en info.version:

Reglas para incrementar la versión:

  • MAJOR: Cambios incompatibles (cambios rompientes en la API)

  • MINOR: Nueva funcionalidad (compatible hacia atrás)

  • PATCH: Correcciones de bugs (compatible hacia atrás)

Etiquetas y agrupación

DEBE usa tags para agrupar endpoints relacionados:

circle-info

Las operaciones se agrupan por tag en la navegación de GitBook. Agrupa endpoints relacionados bajo el mismo tag para una mejor organización.

Ejemplo completo


Desarrollo local

Previsualizar documentación localmente

Usa Redocly CLI para previsualizar tu documentación OpenAPI:

Agregar a package.json

Agrega un script de build por conveniencia:

Instalar Redocly CLI

Validar especificación OpenAPI


Configuración de automatización

Paso 1: Configurar secretos de GitBook

Para publicar especificaciones de API en GitBook, agrega estos secretos a tu repositorio:

Settings → Secrets and variables → Actions → New repository secret

Nombre del secreto
Descripción
Dónde encontrar

GITBOOK_ORGANIZATION_ID

El ID de tu organización en GitBook

GitBook Settings → Organization

GITBOOK_TOKEN

Token de la API de GitBook

GitBook Settings → API Tokens

circle-exclamation

Paso 2: Agregar workflow de GitHub Actions

Crear .github/workflows/build-api-docs.yml en tu repositorio:

Parámetros:

  • api-spec-file: Ruta a tu especificación OpenAPI (usualmente docs/openapi.yaml)

  • output-file: Dónde generar la documentación HTML

  • output-directory: Directorio para los archivos de salida

  • api-spec-name: Nombre único para tu especificación de API (usado en GitBook)

  • node-version: Versión de Node.js a usar

Este workflow hará:

  1. ✅ Validar la especificación OpenAPI

  2. ✅ Empaquetar la especificación en un único archivo

  3. ✅ Construir documentación HTML estática usando Redocly

  4. ✅ Desplegar automáticamente en GitHub Pages

  5. ✅ Publicar la especificación en GitBook (si los secretos están configurados)

Paso 3: Habilitar GitHub Pages

Configura GitHub Pages en tu repositorio:

  1. Ve a Settings → Pages

  2. Bajo Build and deployment:

    • Establece Source a GitHub Actions

  3. Asegúrate de que exista un environment llamado github-pages

  4. Guardar configuraciones

Después de la primera ejecución exitosa del workflow, tu documentación estará disponible en:

  • Docs HTML: https://decentraland.github.io/<repo>/index.html

  • Especificación OpenAPI: https://decentraland.github.io/<repo>/openapi.yaml

  • JSON empaquetado: https://decentraland.github.io/<repo>/openapi.json

circle-check

Agregar a GitBook

Una vez que tu documentación de API esté desplegada, agrégala a la documentación centralizada en GitBook.

Adición manual (proceso actual)

  1. Navega al espacio de GitBook

  2. Ve a la API Reference sección

  3. Haz clic en Add API Reference

  4. Introduce los detalles de tu servicio:

    • Name: El nombre de tu servicio (p. ej., "Social Service")

    • OpenAPI URL: https://decentraland.github.io/{repo-name}/openapi.yaml

  5. Guardar

Funciones de integración de GitBook

GitBook hará automáticamente:

  • Parsear tu especificación OpenAPI

  • Generar documentación interactiva de la API

  • Crear navegación de endpoints basada en tags

  • Proveer funcionalidad de "Try it"

  • Mantener la documentación sincronizada cuando actualices la especificación


Flujo de configuración completo

Configuración inicial

spinner

Actualizaciones continuas

spinner

Buenas prácticas

Calidad de la documentación

  • Sé descriptivo: Escribe resúmenes y descripciones claras

  • Proporciona ejemplos: Incluye ejemplos de request/response

  • Documenta errores: Describe todas las posibles respuestas de error

  • Usa components: Reutiliza esquemas vía $ref para evitar duplicación

  • Agrega descripciones: Cada parámetro, propiedad y respuesta debe tener una descripción

Ejemplo con buenas prácticas

Reutilización de esquemas

Esquemas de seguridad


Validaciones y controles de calidad

Validación pre-commit

Agrega un hook pre-commit o una comprobación en CI:

Reglas comunes de validación

  • Todas las paths tienen operation IDs

  • Todas las operaciones tienen tags

  • Todos los parámetros tienen descripciones

  • Todas las respuestas están documentadas

  • Se proporcionan ejemplos

  • Los esquemas están referenciados correctamente


Solución de problemas

El workflow falla

Problema: El workflow de GitHub Actions falla

Soluciones:

  • Revisa los logs del workflow por errores de validación

  • Ejecuta redocly lint docs/openapi.yaml localmente

  • Verifica las rutas de archivos en la configuración del workflow

  • Asegúrate de que los secretos estén configurados correctamente

GitHub Pages no funciona

Problema: Los docs no aparecen en la URL de GitHub Pages

Soluciones:

  • Verifica que GitHub Pages esté habilitado en la configuración del repositorio

  • Comprueba que el workflow se haya completado exitosamente

  • Espera unos minutos para que GitHub Pages se actualice

  • Verifica que el github-pages environment exista

GitBook no se sincroniza

Problema: GitBook no muestra la documentación de API actualizada

Soluciones:

  • Verifica que los secretos de GitBook sean correctos

  • Comprueba que la URL OpenAPI sea accesible

  • Forzar una actualización manual en GitBook

  • Verifica que la especificación OpenAPI sea válida


Migración desde documentación existente

Si tienes documentación de API existente:

  1. Exportar a OpenAPI: Convertir la documentación existente al formato OpenAPI 3.1

  2. Validar: Usar redocly lint para asegurar el cumplimiento

  3. Agregar workflow: Configurar la automatización con GitHub Actions

  4. Probar: Verificar que la documentación se compile y despliegue correctamente

  5. Actualizar enlaces: Apuntar los enlaces de la documentación antigua a la nueva URL de GitHub Pages

  6. Archivar la documentación antigua: Mantener la documentación antigua como referencia durante la transición


Próximos pasos

Recursos

Última actualización