Creazione di API RESTful in Django con Django REST Framework

Django REST Framework (DRF) è un toolkit potente e flessibile per la creazione di API Web. Semplifica il processo di creazione di API RESTful, fornendo funzionalità come serializzatori, viewset e meccanismi di autenticazione out of the box.

Impostazione del framework Django REST

Prima di poter creare una API RESTful, devi installare Django REST Framework e aggiungerlo al tuo progetto. Esegui il seguente comando per installare DRF:

pip install djangorestframework

Quindi, aggiungi 'rest_framework' a INSTALLED_APPS nel tuo file settings.py:

INSTALLED_APPS = [
    ...,
    'rest_framework',
]

Creazione di una API semplice

Creiamo un'API per un modello semplice chiamato Book. Il primo passo è definire il modello in models.py:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)
    published_date = models.DateField()
    isbn = models.CharField(max_length=13)

    def __str__(self):
        return self.title

Dopo aver definito il modello, eseguire le migrazioni per creare la tabella del database:

python manage.py makemigrations
python manage.py migrate

Creazione di un serializzatore

I serializzatori in DRF convertono tipi di dati complessi come i modelli Django in JSON. Crea un serializzatore per il modello Book:

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

Creazione di visualizzazioni e URL

DRF fornisce due modi principali per creare viste API: viste basate su funzioni e viste basate su classi. Qui, utilizziamo viste basate su classi con APIView:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Book
from .serializers import BookSerializer

class BookListCreateAPIView(APIView):
    def get(self, request):
        books = Book.objects.all()
        serializer = BookSerializer(books, many=True)
        return Response(serializer.data)

    def post(self, request):
        serializer = BookSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Successivamente, configura gli URL per questa vista in urls.py:

from django.urls import path
from .views import BookListCreateAPIView

urlpatterns = [
    path('books/', BookListCreateAPIView.as_view(), name='book-list-create'),
]

Test dell'API

Con il server in esecuzione, puoi testare l'API su http://127.0.0.1:8000/books/ usando strumenti come Postman o curl. Una richiesta GET recupera tutti i libri e una richiesta POST ti consente di creare un nuovo libro.

Miglioramento dell'API con ViewSets

Per un codice più conciso e riutilizzabile, puoi usare ViewSet e Router di DRF. Ecco come aggiornare l'API per usare un ModelViewSet:

from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializers import BookSerializer

class BookViewSet(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

Quindi, configura il router in urls.py:

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet, basename='book')

urlpatterns = router.urls

Conclusione

Django REST Framework semplifica la creazione di API RESTful robuste e flessibili. Utilizzando serializzatori, viste e router, puoi creare API che gestiscono modelli di dati complessi con facilità. Con questa base, ora puoi esplorare funzionalità avanzate come permessi personalizzati, paginazione e autenticazione in DRF.