Saltar al contenido principal

3.2-API_DOCUMENTATION_EXAMPLES

Ver en Git


Ejemplos de Documentación de APIs

Este documento contiene ejemplos prácticos de cómo documentar diferentes tipos de endpoints usando OpenAPI 3.0.

Ejemplos por Tipo de Endpoint

1. GET Simple (sin parámetros)

@exception_handler
def get(self):
"""
---
summary: Obtener lista de recursos
description: Retorna todos los recursos disponibles para el usuario
tags:
- Recursos
security:
- bearerAuth: []
responses:
200:
description: Lista de recursos
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
"""

2. GET con Parámetros de Query

@exception_handler
def get(self):
"""
---
summary: Buscar usuarios
description: Busca usuarios según criterios específicos
tags:
- Usuarios
security:
- bearerAuth: []
parameters:
- name: email
in: query
required: false
schema:
type: string
description: Email del usuario a buscar
- name: page
in: query
required: false
schema:
type: integer
default: 1
description: Número de página
- name: limit
in: query
required: false
schema:
type: integer
default: 20
description: Cantidad de resultados por página
responses:
200:
description: Usuarios encontrados
content:
application/json:
schema:
type: object
properties:
users:
type: array
items:
type: object
total:
type: integer
"""

3. GET con Parámetros de Path

@exception_handler
def get(self, user_id):
"""
---
summary: Obtener usuario por ID
description: Retorna la información detallada de un usuario específico
tags:
- Usuarios
security:
- bearerAuth: []
parameters:
- name: user_id
in: path
required: true
schema:
type: integer
description: ID del usuario
responses:
200:
description: Información del usuario
content:
application/json:
schema:
type: object
properties:
id:
type: integer
nombre:
type: string
email:
type: string
404:
description: Usuario no encontrado
"""

4. POST con Request Body

@exception_handler
def post(self):
"""
---
summary: Crear nuevo usuario
description: Crea un nuevo usuario en el sistema
tags:
- Usuarios
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- email
- password
- nombre
properties:
email:
type: string
format: email
example: usuario@ejemplo.com
password:
type: string
format: password
minLength: 8
nombre:
type: string
example: Juan
apellido:
type: string
example: Pérez
responses:
201:
description: Usuario creado exitosamente
content:
application/json:
schema:
type: object
properties:
code:
type: integer
example: 0
user_id:
type: integer
example: 123
400:
description: Datos inválidos
409:
description: El usuario ya existe
"""

5. PUT/PATCH para Actualización

@exception_handler
def patch(self, user_id):
"""
---
summary: Actualizar usuario
description: Actualiza parcialmente la información de un usuario
tags:
- Usuarios
security:
- bearerAuth: []
parameters:
- name: user_id
in: path
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
nombre:
type: string
apellido:
type: string
telefono:
type: string
responses:
200:
description: Usuario actualizado
content:
application/json:
schema:
type: object
properties:
code:
type: integer
example: 0
message:
type: string
example: Usuario actualizado exitosamente
404:
description: Usuario no encontrado
"""

6. DELETE

@exception_handler
def delete(self, resource_id):
"""
---
summary: Eliminar recurso
description: Elimina un recurso del sistema
tags:
- Recursos
security:
- bearerAuth: []
parameters:
- name: resource_id
in: path
required: true
schema:
type: integer
responses:
200:
description: Recurso eliminado
content:
application/json:
schema:
type: object
properties:
code:
type: integer
example: 0
message:
type: string
404:
description: Recurso no encontrado
403:
description: Sin permisos para eliminar
"""

Tipos de Datos Comunes

Tipos Básicos

  • string: Texto
  • integer: Número entero
  • number: Número decimal
  • boolean: true/false
  • array: Lista
  • object: Objeto JSON

Formatos Especiales

  • format: email: Email válido
  • format: date: Fecha (YYYY-MM-DD)
  • format: date-time: Fecha y hora ISO 8601
  • format: password: Contraseña (oculta en UI)
  • format: uri: URL válida
  • format: uuid: UUID válido

Validaciones

schema:
type: string
minLength: 3
maxLength: 100
pattern: '^[a-zA-Z]+$'

schema:
type: integer
minimum: 0
maximum: 100

schema:
type: array
minItems: 1
maxItems: 10
items:
type: string