Tworzenie interfejsów API RESTful w Django za pomocą Django REST Framework

Django REST Framework (DRF) to potężny i elastyczny zestaw narzędzi do tworzenia interfejsów API sieci Web. Upraszcza proces tworzenia interfejsów API RESTful, zapewniając funkcje takie jak serializatory, zestawy widoków i mechanizmy uwierzytelniania od razu po wyjęciu z pudełka.

Konfigurowanie struktury Django REST

Zanim będziesz mógł utworzyć RESTful API, musisz zainstalować Django REST Framework i dodać go do swojego projektu. Uruchom następujące polecenie, aby zainstalować DRF:

pip install djangorestframework

Następnie dodaj 'rest_framework' do INSTALLED_APPS w pliku settings.py:

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

Tworzenie prostego API

Utwórzmy API dla prostego modelu o nazwie Book. Pierwszym krokiem jest zdefiniowanie modelu w 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

Po zdefiniowaniu modelu uruchom migracje, aby utworzyć tabelę bazy danych:

python manage.py makemigrations
python manage.py migrate

Tworzenie serializatora

Serializatory w DRF konwertują złożone typy danych, takie jak modele Django, na JSON. Utwórz serializator dla modelu Book:

from rest_framework import serializers
from .models import Book

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

Widoki budynków i adresy URL

DRF udostępnia dwa główne sposoby tworzenia widoków API: widoki oparte na funkcjach i widoki oparte na klasach. Tutaj używamy widoków opartych na klasach z 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)

Następnie skonfiguruj adresy URL dla tego widoku w pliku urls.py:

from django.urls import path
from .views import BookListCreateAPIView

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

Testowanie API

Gdy serwer jest uruchomiony, możesz przetestować API na http://127.0.0.1:8000/books/, używając narzędzi takich jak Postman lub curl. Żądanie GET pobiera wszystkie książki, a żądanie POST umożliwia utworzenie nowej książki.

Ulepszanie API za pomocą ViewSets

Aby uzyskać bardziej zwięzły i wielokrotnego użytku kod, możesz użyć ViewSet i Router DRF. Oto jak zaktualizować API, aby użyć 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

Następnie skonfiguruj router w urls.py:

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

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

urlpatterns = router.urls

Wniosek

Django REST Framework ułatwia tworzenie solidnych i elastycznych interfejsów API RESTful. Używając serializatorów, widoków i routerów, możesz łatwo tworzyć interfejsy API obsługujące złożone modele danych. Dzięki temu fundamentowi możesz teraz eksplorować zaawansowane funkcje, takie jak niestandardowe uprawnienia, paginacja i uwierzytelnianie w DRF.