Crearea de API-uri RESTful în Django cu Django REST Framework

Django REST Framework (DRF) este un set de instrumente puternic și flexibil pentru construirea de API-uri web. Simplifică procesul de creare a API-urilor RESTful, oferind funcții precum serializatoare, seturi de vizualizare și mecanisme de autentificare.

Configurarea cadrului REST Django

Înainte de a putea crea un API RESTful, trebuie să instalați Django REST Framework și să îl adăugați în proiect. Rulați următoarea comandă pentru a instala DRF:

pip install djangorestframework

Apoi, adăugați 'rest_framework' la INSTALLED_APPS în fișierul dvs. settings.py:

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

Crearea unui API simplu

Să creăm un API pentru un model simplu numit Book. Primul pas este definirea modelului în 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

După definirea modelului, rulați migrarea pentru a crea tabelul bazei de date:

python manage.py makemigrations
python manage.py migrate

Crearea unui serializator

Serializatoarele din DRF convertesc tipuri de date complexe, cum ar fi modelele Django, în JSON. Creați un serializator pentru modelul Book:

from rest_framework import serializers
from .models import Book

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

Construirea vizualizărilor și adreselor URL

DRF oferă două moduri principale de a crea vizualizări API: vizualizări bazate pe funcții și vizualizări bazate pe clasă. Aici, folosim vizualizări bazate pe clasă cu 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)

Apoi, configurați adresele URL pentru această vizualizare în urls.py:

from django.urls import path
from .views import BookListCreateAPIView

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

Testarea API-ului

Cu serverul în funcțiune, puteți testa API-ul la http://127.0.0.1:8000/books/ folosind instrumente precum Postman sau curl. O solicitare GET preia toate cărțile, iar o solicitare POST vă permite să creați o carte nouă.

Îmbunătățirea API-ului cu ViewSets

Pentru un cod mai concis și reutilizabil, puteți utiliza ViewSet și Router de la DRF. Iată cum să actualizați API-ul pentru a utiliza 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

Apoi, configurați routerul în urls.py:

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

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

urlpatterns = router.urls

Concluzie

Django REST Framework simplifică crearea de API-uri RESTful robuste și flexibile. Folosind serializatoare, vizualizări și routere, puteți construi API-uri care gestionează cu ușurință modele de date complexe. Cu această bază, puteți explora acum funcții avansate, cum ar fi permisiunile personalizate, paginarea și autentificarea în DRF.