Tu primera API¶
De un schema de tai-sql a una API con login y permisos. Se da por hecho que tienes un proyecto de
tai-sql con un schema public —si no, empieza por el
primer proyecto de tai-sql—
y una base de datos PostgreSQL.
1. Crear el proyecto de la API¶
Desde mi-proyecto/:
Crea api/ —el nombre de la carpeta es el namespace, api por defecto— con su
.taiapiproject, su pyproject.toml, el paquete Python y un dockerfile. Ver
El proyecto por dentro.
2. Generar los endpoints¶
La primera vez pregunta qué schemas generar; después recuerda la respuesta (generated_schemas
del .taiapiproject). Escribe el cliente de tai-sql en api/database/public/, los endpoints en
api/routers/database/public/ y el diagrama entidad-relación.
3. Arrancar sin autenticación¶
La API está en http://localhost:8000, con la documentación en /docs y el diagrama en
/docs/diagrams. Sin autenticación configurada, todos los endpoints están abiertos.
4. Añadir autenticación¶
Pregunta el modo:
Los usuarios, los roles y los permisos viven en un schema auth de tu propia base de datos,
que tai-api crea en el proyecto de tai-sql.
Además crea rbac/main.py, la declaración de permisos del realm main.
5. Declarar los permisos¶
# rbac/main.py
from tai_api.rbac import source, role
source(realm_name="main", dbschemas=["public"])
role(name="Administrador", api_permissions=["sudo", "main-admin"])
role(name="lector", api_permissions=["usuario-read", "post-read"])
source() registra los permisos de cada tabla del schema (post-read, post-create…), y cada
role() los agrupa. Se llevan al backend con:
Ver Permisos y roles.
6. Arrancar con autenticación¶
curl -X POST http://localhost:8000/auth/main/login \
-H 'Content-Type: application/json' -d '{"username": "admin", "password": "admin"}'
# → data.access_token
curl http://localhost:8000/public/usuario -H "Authorization: Bearer <access_token>"
Sin token, 401; con un token sin el permiso, 403. La documentación en /docs pide ahora usuario
admin y la contraseña de API_DOCS_PWD.
Cambia la contraseña del admin
En modo Database, el usuario admin se crea con la contraseña de ADMIN_PWD, o admin si no
está definida. Cámbiala antes de desplegar: POST /auth/me/password con
{"current_password": "admin", "new_password": "…"}.
Siguientes pasos¶
- La API generada: filtros, paginación, relaciones y errores.
- La sesión con cookie y el cliente TypeScript, si hay un frontend.
- Desplegar.