API REST del plugin¶
Convenciones HTTP que debe cumplir la API de tu plugin para integrarse con tablas, formularios y el shell.
Cuándo aplica¶
- Implementas endpoints que alimentan widgets
data-tableoform. - Necesitas paginación, orden o búsqueda en listados.
- Expones datos multi-tenant.
Prefijo y montaje¶
- Todas las rutas de plataforma viven bajo
/api/v1. - El
APIRouterde tu plugin se monta sin prefijo extra de versión; tú defines el prefijo de dominio (/clients,/booking, etc.). - El guard de plugins desactiva rutas si el id no está en
CORTEX_ENABLED_PLUGINS.
Tenant¶
Envía siempre el header de tenant en peticiones desde el shell o pruebas manuales:
El valor por defecto configurable es CORTEX_DEFAULT_TENANT.
Listados estándar¶
Usa list_endpoint del framework para respuestas compatibles con DataTableWidget:
from cortex_framework.api.list_response import list_endpoint
@router.get("/clients")
async def clients(request: Request) -> dict:
items = [...]
return list_endpoint(items, request)
Formato de respuesta¶
También se acepta un array plano; la tabla lo normaliza cuando no hay meta.
Query params que interpreta la tabla¶
| Parámetro | Uso |
|---|---|
page, pageSize | Paginación |
sort | Campo de orden (prefijo - para descendente) |
search o q | Búsqueda global si las columnas son searchable |
filter[campo] | Filtros declarados en FilterBuilder |
Implementación: framework/cortex_framework/api/list_response.py.
Registros individuales¶
- Cada fila debe incluir
id(string o UUID) para acciones por fila, edición y bulk. GET /recurso/{id}devuelve el objeto pararecordPathen formularios de edición.- Errores: usa
HTTPExceptioncon códigos HTTP estándar; el shell muestra el mensaje al usuario.
Formularios¶
GET /api/v1/forms/{formId}— lo sirve el framework desdeFormDefinitionregistrado en bootstrap.- El submit del widget
formhacePOSToPUTa la ruta definida ensubmit.pathdel widget. - Tu plugin implementa la persistencia en esas rutas.
CORS y rate limit¶
La API aplica CORS abierto en desarrollo y RateLimitMiddleware según CORTEX_RATE_LIMIT_PER_MINUTE (Redis).
Health y diagnóstico¶
| Ruta | Propósito |
|---|---|
GET /api/v1/health | Estado del servicio |
GET /api/v1/info | Info de tenant y plugins |
GET /api/docs | OpenAPI interactivo |
Muchos plugins exponen GET /{namespace}/info como diagnóstico local.
Siguiente paso¶
Columnas de tabla — cómo declarar columnas y filtros que consumen estos listados.