Volver a la wiki

Django Ninja como framework REST

ADR — Django Ninja como framework REST

Contexto

A comienzos de 2026, CreaRack Pro operaba con una API REST en crecimiento acelerado que superaba los 500 endpoints distribuidos en 6 apps Django (racks, core, monitoring, network, blueprints, signage). El equipo (2 devs, stack Python-first) necesitaba un framework REST que sostuviera ese volumen con tipado estricto, generación automática de documentación OpenAPI y compatibilidad con el runtime asíncrono (ASGI + Django Channels) ya adoptado. La elección impactaba directamente en velocidad de desarrollo, integridad de contratos de datos y facilidad de mantener docs actualizados sin esfuerzo manual.

DRF era la opción canónica del ecosistema Django usada en versiones anteriores, pero su modelo de serializers verbosos, ausencia de tipado nativo con Pydantic y compatibilidad ASGI parcial lo hacían débil para el estado actual. FastAPI era alternativa moderna con Pydantic v2 de primera clase, pero requería abandonar ORM Django, migraciones, admin y toda la infraestructura construida sobre Django (allauth, Channels, permisos, middleware).

Opciones consideradas

Django REST Framework (DRF):

FastAPI:

Django Ninja:

Decisión

Se adopta Django Ninja 1.6.2 (pinned en requirements.txt) como framework REST exclusivo. Sustentado en 3 evidencias directas:

  1. Patrón Router modular: cada app define su Router (e.g., router = Router(tags=["Racks"]) en racks/api/racks.py) montado en URL raíz. Permite colocar y testear cada dominio independientemente.
  2. Schemas Pydantic como contrato: endpoints declaran entrada y salida con subclases de Schema. Validación tipos, serialización y OpenAPI son consecuencia directa.
  3. Integración transparente con Django: handlers reciben request y acceden directamente al ORM, middlewares de auth y sistema de permisos sin adaptadores.

Consecuencias

Positivas:

Negativas:

Status

Accepted — en uso desde v1.0 en producción. DRF prohibido en código nuevo (CLAUDE.md § 2). Sin plan de migración.

Véase también

Subir