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.2

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.2
File Size Uploaded Provenance
tai_api-0.5.2.tar.gz 411.0 kB Without provenance Details

Built distribution (wheel)

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

Total release size: 924.4 kB

Release files / tai_api-0.5.2.tar.gz

Download URL tai_api-0.5.2.tar.gz
Size 411.0 kB
Tags Source
SHA-256 checksum
How to use checksums
9125253fd28551af8ee70950dfc151a7242a177e78c8d17e14664833c0f7b6e4
BLAKE2b-256 checksum
How to use checksums
d473c2795da1eae2dad27d1a2b68411d37d3c62f8b1326935689878c694d7137
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.2-py3-none-any.whl

Download URL tai_api-0.5.2-py3-none-any.whl
Size 513.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
95a89f96f325fd1c4d0d5e80064230158b8db491ea5e014d971a9e764afe990a
BLAKE2b-256 checksum
How to use checksums
4a2c319f8a0836e095ace2394709c868deffc4a64b38eb829b18a5e2776e9964
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.2

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.2 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