Skip to main content

tai-api

PyPI Python License: MIT Manual

Framework declarativo de Python, sobre FastAPI, que convierte un schema de tai-sql en una API REST completa. No se escriben endpoints: se declara la base de datos con tai-sql, se declara quién puede hacer qué en un fichero de permisos, y tai-api genera el resto —endpoints, autenticación, permisos, filtrado por fila, documentación— y el cliente TypeScript que la consume.

schemas/public.py (tai-sql) ──▶ tai-api generate  ──▶ la API: /public/<tabla>, /auth, /rbac, /docs
rbac/main.py                ──▶ tai-api rbac push ──▶ permisos, roles y RLS en la base de datos o en Keycloak
                                tai-api generate  ──▶ el cliente TypeScript del frontend

📖 El manual completo está en triplealpha-innovation.github.io/tai-api


Quickstart

Desde el directorio que contiene el proyecto de tai-sql (database/, con schemas/public.py):

pip install 'tai-api[run]'                # generar, y levantar la API con tai-api dev
tai-api init mi-api --install             # crea api/
export MAIN_DATABASE_URL="postgresql://user:pass@localhost:5432/mydb"
tai-api generate                          # endpoints, cliente de datos y diagrama
tai-api dev                               # http://localhost:8000/docs
curl 'http://localhost:8000/public/usuario?limit=5&includes=posts'

Con autenticación:

tai-api auth init                         # Database o Keycloak
tai-api rbac push                         # lleva rbac/main.py al backend
tai-api generate
tai-api dev --auth

Los principios que explican el resto

  1. La API es un derivado desechable. Se regenera entera desde el schema de tai-sql y el fichero de permisos. Si un endpoint no hace lo que necesitas, no se edita: se arregla la declaración, o se añade el tuyo en routers/custom/.
  2. El código generado nunca importa tai_api. tai-api es una herramienta de desarrollo, no una dependencia de producción.
  3. La misma forma en todos los proyectos. Los mismos endpoints, filtros, errores y sesión: un frontend sabe consultar una API de tai-api sin haberla visto antes.
  4. Dos modos de autenticación, una sola superficie. Database y Keycloak exponen las mismas rutas y los mismos permisos: un endpoint generado no sabe con cuál funciona.

Qué trae

Endpoints por tabla Lectura con filtros por tipo de columna, paginación, orden y relaciones anidadas; escritura uno a uno y masiva; agregaciones con GROUP BY
Autenticación Usuarios en tu base de datos o en Keycloak, con una sesión por usuario, y login por redirección con PKCE
La sesión con cookie El refresh token en una cookie httpOnly que el JavaScript no alcanza, con rotación, detección de reutilización y duraciones de jornada laboral
Permisos y RLS rbac/<realm>.py declara roles y reglas de filtrado por fila, y rbac push los sincroniza con el backend
Cliente TypeScript Tipado, sin dependencias, con la sesión resuelta —refresco de un solo vuelo, varias pestañas—, opciones de TanStack Query y esquemas zod. Avisa si la API cambió desde que se generó
Documentación Swagger, Scalar y el diagrama entidad-relación, protegidos en producción
MCP Las lecturas como herramientas para asistentes de IA (set-mcp)
Reglas para asistentes rules install deja en el repositorio cómo funciona tai-api y cómo es tu API —endpoints, permisos, RLS—, junto a las de tai-sql

El manual

Sección Qué responde
Instalación Qué instalar, y por qué son dos instalaciones y no una
Tu primera API De un schema de tai-sql a una API con login, paso a paso
La API Qué endpoints genera y cómo se consultan
Autenticación Database o Keycloak, la sesión con cookie, permisos y RLS
El cliente TypeScript Consumir la API desde React o Svelte
El proyecto Configuración, extender la API y desplegarla
Referencia Comandos, variables de entorno y códigos de error

Desarrollo

git clone https://github.com/triplealpha-innovation/tai-api
cd tai-api
poetry install --all-extras

poetry run pytest                          # todo lo que el entorno permita
poetry run pytest -m "not db and not keycloak"   # lo que corre sin servicios

Los tests marcados db levantan la API generada contra PostgreSQL y se saltan si no lo hay; los marcados keycloak, contra un Keycloak en TAI_API_TEST_KEYCLOAK_URL. Los del cliente TypeScript necesitan Node 20.

El CI tiene tres workflows: tests.yaml ejecuta la suite en cada push y PR a main y dev, docs.yaml publica el manual y publish.yaml publica a PyPI en push a main. La rama de trabajo habitual es dev.

El manual, en local

pip install -r docs/requirements.txt
mkdocs serve            # http://127.0.0.1:8000, con recarga en caliente
mkdocs build --strict   # lo mismo que valida el CI

El manual vive en docs/ y es para quien usa tai-api. Para quien trabaja en tai-api están DEV_README.md, el README.md de cada paquete y las reglas de .claude/rules/.


Licencia

MIT. Ver LICENSE.


Desarrollado por Triple Alpha Innovation · Issues

Metadata

Release files for tai-api 0.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tai-api 0.5.1
File Size Uploaded Provenance
tai_api-0.5.1.tar.gz 410.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for tai-api 0.5.1
File Interpreter ABI Platform
tai_api-0.5.1-py3-none-any.whl Python 3 none any Details

Total release size: 924.4 kB

Release files / tai_api-0.5.1.tar.gz

Download URL tai_api-0.5.1.tar.gz
Size 410.9 kB
Tags Source
SHA-256 checksum
How to use checksums
6e812207ef194e7c7e9768439e22a0e4dbfe50c9fb12a80f160cb46838942e59
BLAKE2b-256 checksum
How to use checksums
efa001563a26c068bc8f26ff0494a3eabb1f4b2c3b479faffe0ff0ef0993a443
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.5.1 CPython/3.11.0 Linux/6.17.0-1022-azure

Release files / tai_api-0.5.1-py3-none-any.whl

Download URL tai_api-0.5.1-py3-none-any.whl
Size 513.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8324bb23a543dd15b6f303e94da4d48053e0a81156beab6135faa15a22023ccc
BLAKE2b-256 checksum
How to use checksums
34f3217cccca78ab2b4b652b8fe239489b066110e713e6ddac173d8bc5c233b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.5.1 CPython/3.11.0 Linux/6.17.0-1022-azure

Security for tai-api 0.5.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.5.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page