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 |