Introducción a Django Ninja — Principales diferencias con Django REST framework#

Este es el artículo número 3 de la serie de tutoriales de Django Ninja.
Antes de elegir cualquier herramienta, por lo general nos informamos sobre los problemas que puede resolver y si se ajusta a nuestras necesidades.
En este artículo presentaremos Django Ninja, un moderno framework de API, exploraremos sus orígenes y características principales, y compararemos detalladamente sus diferencias con Django REST framework para ayudarte a elegir la herramienta más adecuada.
Proyecto de ejemplo en GitHub#
Django Ninja: El FastAPI del ecosistema Django#
El origen de Django Ninja tiene una estrecha relación con FastAPI.
Django Ninja puede considerarse como «el FastAPI para Django», con la cualidad de integrarse de manera mucho más fluida con Django que FastAPI de forma nativa.
En la documentación oficial de Django Ninja, su autor Vitaliy Kucheryaviy explica por qué creó este framework. Surgió debido a algunos desafíos que enfrentó al utilizar FastAPI en proyectos de Django, especialmente en lo que respecta a la integración.
Por lo tanto, decidió crear él mismo una herramienta más adecuada, dando nacimiento a Django Ninja.
Como es de suponer, Django Ninja se inspiró profundamente en FastAPI. De hecho, también tomó prestadas muchas de las excelentes prácticas de Django REST framework, ¡lo cual es la ventaja de llegar después!
En la documentación se cita la siguiente frase, que refleja una duda muy común:
Django Ninja looks basically the same as FastAPI, so why not just use FastAPI?
La respuesta es: la integración entre Django y FastAPI no es perfecta, mientras que Django Ninja ofrece una versión mucho más adaptada a los desarrolladores de Django.
Características de Django Ninja#
Algunas características clave de Django Ninja lo convierten en una opción excelente para los desarrolladores de API en Django:
- Generación automática de documentación de API: Aprovecha los type hints de Python y Pydantic para generar automáticamente documentación de API conforme al estándar OpenAPI, reduciendo enormemente la carga de trabajo en el mantenimiento de la documentación (siendo esta la mayor razón por la que elegí Django Ninja).
- Validación de solicitudes y serialización de datos: Basado en Pydantic BaseModel, valida los datos de la solicitud y maneja la serialización y deserialización de datos, garantizando la estabilidad de la API y la corrección de los datos.
- Definición de API concisa y eficiente: Django Ninja ofrece una forma simple y clara de definir las rutas de la API y la lógica de procesamiento (funciones view), permitiendo a los desarrolladores comenzar rápidamente.
- Integración fluida con Django: El framework fue diseñado considerando desde el inicio la compatibilidad con Django, permitiendo integrarse fácilmente en proyectos de Django existentes y aprovechar al máximo sus funciones actuales, como el ORM.
- Soporte asíncrono: Django Ninja admite el procesamiento asíncrono, permitiendo que la API mantenga una alta velocidad de respuesta y rendimiento de procesamiento ante un gran volumen de solicitudes.
Ventaja de rendimiento de Django Ninja en modo asíncrono#
Tras conocer las características de Django Ninja, es indispensable volver a resaltar su soporte para el procesamiento asíncrono, lo cual representa una enorme ventaja de rendimiento frente a frameworks síncronos tradicionales como Django REST framework.

Como se observa en la imagen anterior, en escenarios de solicitudes de red con concurrencia relativamente alta (concurrencia=50), la capacidad de procesamiento de Django Ninja supera claramente a Flask + Marshmallow y a Django REST framework.
Los beneficios del procesamiento asíncrono son aún más evidentes cuando solo hay 1 worker, lo cual resulta sumamente significativo para ahorrar recursos e incrementar el rendimiento.
Una vez comprendido Django Ninja, pasemos a comparar sus diferencias con Django REST framework.
Principales diferencias entre Django Ninja y Django REST framework#
Para los lectores que acaban de ingresar al ámbito del desarrollo backend en Python y no estén familiarizados con Django REST framework, pueden consultar mi artículo «Tutorial de Django REST framework (1) Prefacio» para una introducción.
En dicho artículo también explico por qué Django necesita un framework de API como Django REST framework.
Tanto Django REST framework como Django Ninja son herramientas potentes dentro del ecosistema de Django para construir API rápidamente, siendo el primero mucho más antiguo y consolidado.
Sin embargo, existen diferencias notables en su filosofía de diseño e implementación de funciones. Para mí, incluso se puede decir que son herramientas completamente distintas 😎
Las siguientes tres partes resumen lo que personalmente considero las diferencias principales entre ambos.
Filosofía de diseño#
- Django REST framework: Como un framework maduro y completo, ofrece una amplia variedad de componentes. Es ideal para proyectos que requieren un alto grado de personalización y funcionalidades complejas, y cuenta con un sólido respaldo de la comunidad.
- Django Ninja: Se enfoca en la simplicidad y la velocidad de desarrollo, aprovechando características modernas de Python (como los type hints) para simplificar el proceso de desarrollo de API. Es adecuado para proyectos que buscan un desarrollo rápido y alto rendimiento.
Principales diferencias en funcionalidades#
- Serialización:
- Django REST framework: Utiliza serializadores personalizados, ofreciendo soporte para necesidades de serialización más complejas.
- Django Ninja: Utiliza Pydantic BaseModel, simplificando el proceso de serialización, aunque puede no ser tan flexible como Django REST framework.
- Generación de documentación de API:
- Django REST framework: Requiere paquetes adicionales para generar automáticamente la documentación de API mediante código, y el resultado no es tan óptimo como en los frameworks que emplean Pydantic.
- Django Ninja: Genera automáticamente documentación compatible con OpenAPI, siendo un proceso más sencillo y eficiente.
- Rendimiento: (Síncrono vs. Asíncrono)
- Django REST framework: Al ofrecer amplias funcionalidades, el rendimiento puede verse afectado en cierta medida. No admite procesamiento asíncrono.
- Django Ninja: Generalmente muestra un desempeño más rápido en la validación y procesamiento de solicitudes, y admite asincronía.
Soporte de la comunidad y ecosistema#
- Django REST framework: Cuenta con una comunidad madura y una gran cantidad de paquetes de extensión, desarrollado y mantenido por el equipo de encode.
- Django Ninja: Un framework más reciente con una comunidad más reducida, mucha menos información disponible en la red, y mantenido principalmente por su autor individual.
Resumen#
Tanto Django Ninja como Django REST framework poseen sus propias ventajas:
- Si lo que buscas es un desarrollo rápido, alto rendimiento y el uso de los type hints modernos de Python, Django Ninja es la opción ideal, especialmente indicada para escenarios que requieran asincronía.
- Si necesitas manejar esquemas complejos de autenticación, gestión de permisos y requieres una lógica de validación y procesamiento de API altamente personalizada, Django REST framework es una elección sólida y potente.
A través de la presentación de este artículo, confío en que tienes una visión mucho más clara de Django Ninja.
En los siguientes tutoriales profundizaremos en cada una de las partes de Django Ninja para ayudarte a dominar mejor esta herramienta moderna de desarrollo de API.
Sin embargo, antes de eso, tenemos un tema previo importante: Proyecto de ejemplo y configuración del entorno. Este será nuestro primer paso en el aprendizaje de Django Ninja.