APIDoc 4.0 introduce soporte nativo para OpenAPI 3.0, permitiendo escribir especificaciones OpenAPI directamente en comentarios de código y exportar documentación a formato OpenAPI estándar.
x-version
y tagsEscribe especificaciones OpenAPI completas directamente en comentarios:
/**
* @openapi
* /api/users/{id}:
* get:
* summary: Get user by ID
* description: Retrieve a specific user by their unique identifier
* tags: [Users]
* x-version: "2.1.0"
* parameters:
* - name: id
* in: path
* required: true
* schema:
* type: integer
* responses:
* 200:
* description: User found
* content:
* application/json:
* schema:
* $ref: '#/components/schemas/User'
* 404:
* description: User not found
*/
function getUserById(id) {
// Implementation
}
Define operaciones para paths específicos:
/**
* @openapi-path /api/users
* post:
* summary: Create new user
* tags: [Users, v1.5.0] # Version extracted from tags
* requestBody:
* required: true
* content:
* application/json:
* schema:
* $ref: '#/components/schemas/CreateUserRequest'
* responses:
* 201:
* description: User created successfully
* content:
* application/json:
* schema:
* $ref: '#/components/schemas/User'
* 400:
* description: Invalid input data
*/
function createUser() {
// Implementation
}
Define componentes de esquema reutilizables:
/**
* @openapi-schema User
* type: object
* x-version: "1.2.0"
* required:
* - id
* - name
* - email
* properties:
* id:
* type: integer
* format: int64
* example: 123
* name:
* type: string
* example: "John Doe"
* email:
* type: string
* format: email
* example: "john@example.com"
* role:
* type: string
* enum: [admin, user, moderator]
* default: user
*/
APIDoc extrae versiones automáticamente en el siguiente orden de prioridad:
x-version: "2.1.0" # ← Esta versión se usa
tags: [Users, v1.0.0] # ← Ignorado
tags: [Users, v1.5.0] # ← Versión extraída: "1.5.0"
tags: [API, "version:2.0"] # ← Versión extraída: "2.0"
openapi: 3.0.0
info:
version: "3.1.0" # ← Versión extraída desde info
version: "4.0.0" # ← Fallback cuando no se encuentra versión
/**
* Load complete external OpenAPI specification
* @openapi {openapi=./schemas/users-api.json}
*/
function loadCompleteUserAPI() {
// All operations from users-api.json will be loaded
}
/**
* Load specific path from external file
* @openapi /api/users/{id} {openapi=./schemas/users-api.json}
*/
function getUserById() {
// Only the /api/users/{id} operations will be loaded
}
/**
* Support for YAML files
* @openapi /api/products {openapi=./schemas/products-api.yaml}
*/
function getProducts() {
// Load operations from YAML OpenAPI specification
}
{openapi=./path/to/spec.json}
{openapi=./path/to/spec.yaml}
o {openapi=./path/to/spec.yml}
// Cargar solo la operación GET para /api/users/{id}
/**
* @openapi /api/users/{id} {openapi=./schemas/complete-api.yaml}
*/
// Cargar todas las operaciones para /api/products
/**
* @openapi /api/products {openapi=./schemas/complete-api.yaml}
*/
// Cargar especificación completa (todos los paths)
/**
* @openapi {openapi=./schemas/complete-api.yaml}
*/
APIDoc 4.0 incluye resolución completa de referencias de componentes OpenAPI, resolviendo automáticamente referencias $ref
en archivos externos para generar documentación completa.
# example/schemas/products-api.yaml
openapi: 3.0.0
info:
title: Products API
version: 1.0.0
paths:
/api/products/{id}:
put:
summary: Update product
description: Update product information
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateProductRequest' # ✅ Auto-resolved
responses:
'200':
description: Product updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Product' # ✅ Auto-resolved
'400':
description: Invalid request data
content:
application/json:
schema:
$ref: '#/components/schemas/Error' # ✅ Auto-resolved
components:
schemas:
UpdateProductRequest:
type: object
properties:
name: { type: string }
description: { type: string }
price: { type: number }
category: { type: string }
tags: { type: array, items: { type: string } }
in_stock: { type: boolean }
Product:
type: object
required: [id, name, price, category]
properties:
id: { type: string }
name: { type: string }
description: { type: string }
price: { type: number }
category: { type: string }
tags: { type: array, items: { type: string } }
in_stock: { type: boolean }
reviews: { type: array, items: { type: string } }
Error:
type: object
required: [error, message]
properties:
error: { type: string }
message: { type: string }
details: { type: object }
/**
* @openapi /api/products/{id} {openapi=./schemas/products-api.yaml}
*/
function updateProduct() {
// Automatically generates complete documentation with all tables
}
📋 Tabla Request Body:
Campo | Tipo | Descripción |
---|---|---|
name | String | (opcional) |
description | String | (opcional) |
price | Number | (opcional) |
category | String | (opcional) |
tags | String[] | (opcional) |
in_stock | Boolean | (opcional) |
✅ Tabla Success Response:
Campo | Tipo | Descripción |
---|---|---|
id | String | (requerido) |
name | String | (requerido) |
description | String | (opcional) |
price | Number | (requerido) |
category | String | (requerido) |
tags | String[] | (opcional) |
in_stock | Boolean | (opcional) |
reviews | String[] | (opcional) |
❌ Tabla Error Response:
Campo | Tipo | Descripción |
---|---|---|
error | String | (requerido) |
message | String | (requerido) |
details | Object | (opcional) |
# Crea tanto documentación HTML COMO swagger.json
apidoc -i src/ -o docs/ --openapi
# Crea solo swagger.json y openapi.json (sin HTML)
apidoc -i src/ -o api-spec/ --openapi-only
docs/
├── index.html # Documentación HTML tradicional
├── assets/ # CSS, JS, fonts
├── swagger.json # Especificación OpenAPI 3.0 🆕
└── openapi.json # Igual que swagger.json (compatibilidad) 🆕
@openapi
en comentarios@api
se convierten a OpenAPI 3.0Combina sintaxis APIDoc tradicional con OpenAPI nativo:
/**
* Traditional APIDoc comment
* @api {get} /api/legacy Legacy Endpoint
* @apiVersion 1.0.0
* @apiName GetLegacy
* @apiGroup Legacy
*/
function legacyEndpoint() {}
/**
* Native OpenAPI comment
* @openapi-path /api/modern
* get:
* summary: Modern Endpoint
* x-version: "4.0.0"
* tags: [Modern]
* responses:
* 200:
* description: Success
*/
function modernEndpoint() {}
Ambos endpoints aparecerán en la misma documentación con versionado y navegación apropiados.
Característica | Soportado | Notas |
---|---|---|
Formatos de Archivo | ||
Archivos JSON (.json) | ✅ | Soporte completo |
Archivos YAML (.yaml, .yml) | ✅ | Soporte completo |
Componentes OpenAPI | ||
Resolución $ref | ✅ | Resolución automática de componentes |
Esquemas de request body | ✅ | Generación completa de tablas |
Esquemas de response | ✅ | Tablas de Success & Error |
Parámetros de path | ✅ | Auto-extraídos |
Parámetros de query | ✅ | Auto-extraídos |
Parámetros de header | ✅ | Auto-extraídos |
Tipos de Esquema | ||
Objetos | ✅ | Extracción completa de propiedades |
Arrays | ✅ | Notación Type[] apropiada |
Objetos anidados | ✅ | Resolución recursiva |
Campos requeridos | ✅ | Marcados apropiadamente |
Campos opcionales | ✅ | Marcados apropiadamente |
Modos de Carga | ||
Archivo completo | ✅ | {openapi=./file.yaml} |
Path específico | ✅ | /path {openapi=./file.yaml} |
Múltiples operaciones | ✅ | Todas las operaciones para un path |