Django: API REST

Guía completa para crear APIs con Django REST Framework, dominar HTTP y estructurar endpoints de forma eficiente.

Aprende Django GRATIS y certifícate

La creación de una API REST es fundamental en muchos proyectos que requieren comunicación entre diferentes servicios. Con Django REST Framework, dispones de un conjunto de herramientas para exponer datos y manejar peticiones HTTP de forma clara.

En Django REST Framework, cada vista puede funcionar como un endpoint que procesa operaciones como GET, POST o DELETE. Este enfoque potencia la arquitectura REST, donde cada recurso tiene una URL única y se aprovechan los métodos HTTP para realizar acciones específicas.

“Un diseño basado en HTTP y recursos ayuda a mantener una estructura comprensible y facilita la escalabilidad de la aplicación.”

El uso de serializers en Django REST Framework te permite transformar modelos de Python en formatos como JSON o XML, simplificando el intercambio de datos. Cada serializer define los campos a exponer en la API y puede encargarse de la validación.

Para configurar un serializer, se crea un archivo serializers.py dentro de la aplicación. Un ejemplo básico sería:

from rest_framework import serializers
from .models import Articulo

class ArticuloSerializer(serializers.ModelSerializer):
    class Meta:
        model = Articulo
        fields = '__all__'

El siguiente paso implica crear vistas que aprovechen este serializer. Las ViewSets y las APIView son dos enfoques muy populares en Django REST Framework. Con un ViewSet, es habitual registrar rutas utilizando routers, lo que te permite evitar definir manualmente cada endpoint.

Un ejemplo de ViewSet podría lucir así:

from rest_framework import viewsets
from .models import Articulo
from .serializers import ArticuloSerializer

class ArticuloViewSet(viewsets.ModelViewSet):
    queryset = Articulo.objects.all()
    serializer_class = ArticuloSerializer

Una vez definida la clase, se configura la URL en el archivo urls.py, registrando el ViewSet en un router:

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import ArticuloViewSet

router = DefaultRouter()
router.register(r'articulos', ArticuloViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

En este enfoque, tu API estará lista para recibir peticiones HTTP. Las operaciones como GET, POST, PUT o DELETE se resuelven automáticamente mediante la lógica interna de Django REST Framework, basada en el ViewSet y el serializer.

Usar routers aporta ventaja a la hora de documentar y organizar los endpoints, ya que se genera una estructura clara. Cada ruta coincide con una acción sobre el recurso y se simplifica la configuración de todas las vistas en un único lugar.

La seguridad de tu API es esencial. Con Django REST Framework, puedes aplicar autenticación token, sesiones o autenticación básica, seleccionando el método que mejor se adapte a tu proyecto. Esto permite un control granular sobre quién accede a cada endpoint.

Para escenarios avanzados, existen clases de permisos que limitan las operaciones según el tipo de usuario. Los permisos integrados como IsAuthenticated, IsAdminUser o DjangoModelPermissions brindan un control detallado del acceso a los datos, maximizando la seguridad de la API.

Cuando diseñes tus endpoints, mantén la consistencia en la denominación de los recursos y en la forma de los datos que ofreces. Evita sobrecargar la API con responsabilidades que no correspondan a la lógica de HTTP y ajusta cada ruta a un único propósito.

A la hora de escribir pruebas, Django REST Framework permite testear tus endpoints de manera similar a como se prueban vistas tradicionales de Django. Así, verificarás fácilmente que los métodos GET, POST, PUT o DELETE se comportan según lo esperado.

Las políticas de versionado, la creación de documentación automática y el uso de la interfaz web incorporada, convierten a Django REST Framework en una elección sólida para desarrollar APIs escalables y mantenibles, aprovechando la potencia de HTTP y el estilo REST.

Con estos fundamentos, puedes estructurar tu API REST de manera eficiente, emplear serializers personalizados y aprovechar la flexibilidad de Django REST Framework para exponer datos o crear microservicios que se comuniquen usando peticiones HTTP.

Empezar curso de Django

Lecciones de este módulo de Django

Lecciones de programación del módulo API REST del curso de Django.

Ejercicios de programación en este módulo de Django

Evalúa tus conocimientos en API REST con ejercicios de programación API REST de tipo Test, Puzzle, Código y Proyecto con VSCode.