Swagger/OpenAPI - Documentação Automática

Gera documentação estilo Swagger UI para sua API.

Instalação

pip install velox-web

Uso

from velox import Velox
from velox.swagger import add_swagger_docs

app = Velox(__name__)

# Suas rotas API
@app.get('/api/users')
def list_users(req, res):
    res.json({'users': [{'id': 1, 'name': 'João'}]})

@app.post('/api/users')
def create_user(req, res):
    data = req.json
    res.json({'created': data}, status=201)

@app.get('/api/users/<int:id>')
def get_user(req, res, id):
    res.json({'id': id, 'name': 'João'})

# Adicionar documentação
add_swagger_docs(app)

app.run()

Acesse:

Configuração

add_swagger_docs(
    app,
    path='/api-docs',      # caminho da documentação
    title='Minha API',    # título
    version='2.0.0'       # versão
)

Decorador @api_doc

Documente suas rotas com metadados:

from velox.swagger import api_doc

@app.get('/api/posts')
@api_doc(
    summary='Lista posts',
    description='Retorna lista de posts paginados',
    tags=['Posts'],
    responses={
        '200': {'description': 'Lista de posts'},
        '401': {'description': 'Não autorizado'},
    }
)
def list_posts(req, res):
    res.json({'posts': []})

Rotas Manuais

Adicione rotas manualmente para melhor documentação:

from velox.swagger import SwaggerRouter

app = Velox(__name__)
swagger = SwaggerRouter(app, title='API Documentation')

# Adicionar rota manualmente
swagger.add_route(
    '/api/products',
    'GET',
    list_products_handler,
    summary='Lista produtos',
    tags=['Products']
)

app.include(swagger, prefix='/docs')

SwaggerRouter

from velox.swagger import SwaggerRouter

swagger = SwaggerRouter(
    app,
    title='API Documentation',
    version='1.0.0',
    description='API do meu sistema',
    openapi_version='3.0.0'
)

# Obter especificação OpenAPI
spec = swagger.get_openapi_spec()

Classe APIDoc

Documente classes de recursos:

from velox.swagger import APIDoc

@app.resource('/api/users')
@APIDoc('Gerencia usuários', tags=['Users'])
class Users:
    def get(req, res):
        '''Lista todos os usuários'''
        return res.json({'users': []})

    def post(req, res):
        '''Cria um novo usuário'''
        data = req.json
        return res.json({'user': data}, status=201)