Tạo API RESTful trong Django với Django REST Framework

Django REST Framework (DRF) là một bộ công cụ mạnh mẽ và linh hoạt để xây dựng API web. Nó đơn giản hóa quá trình tạo API RESTful, cung cấp các tính năng như serializer, viewset và cơ chế xác thực ngay khi cài đặt.

Thiết lập Django REST Framework

Trước khi bạn có thể tạo RESTful API, bạn cần cài đặt Django REST Framework và thêm nó vào dự án của bạn. Chạy lệnh sau để cài đặt DRF:

pip install djangorestframework

Sau đó, thêm 'rest_framework' vào INSTALLED_APPS trong tệp settings.py của bạn:

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

Tạo một API đơn giản

Hãy tạo một API cho một mô hình đơn giản có tên là Book. Bước đầu tiên là định nghĩa mô hình trong 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

Sau khi xác định mô hình, hãy chạy di chuyển để tạo bảng cơ sở dữ liệu:

python manage.py makemigrations
python manage.py migrate

Tạo một Serializer

Trình tuần tự hóa trong DRF chuyển đổi các kiểu dữ liệu phức tạp như mô hình Django thành JSON. Tạo trình tuần tự hóa cho mô hình Book:

from rest_framework import serializers
from .models import Book

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

Xây dựng View và URL

DRF cung cấp hai cách chính để tạo chế độ xem API: chế độ xem dựa trên hàm và chế độ xem dựa trên lớp. Ở đây, chúng tôi sử dụng chế độ xem dựa trên lớp với 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)

Tiếp theo, cấu hình URL cho chế độ xem này trong urls.py:

from django.urls import path
from .views import BookListCreateAPIView

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

Kiểm tra API

Khi máy chủ đang chạy, bạn có thể kiểm tra API tại http://127.0.0.1:8000/books/ bằng các công cụ như Postman hoặc curl. Yêu cầu GET sẽ truy xuất tất cả sách và yêu cầu POST cho phép bạn tạo một cuốn sách mới.

Cải thiện API với ViewSets

Để có mã ngắn gọn và có thể tái sử dụng hơn, bạn có thể sử dụng ViewSetRouter của DRF. Sau đây là cách cập nhật API để sử dụng 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

Sau đó, cấu hình bộ định tuyến trong urls.py:

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

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

urlpatterns = router.urls

Phần kết luận

Django REST Framework giúp bạn dễ dàng tạo ra các API RESTful mạnh mẽ và linh hoạt. Bằng cách sử dụng serializer, view và router, bạn có thể xây dựng các API xử lý các mô hình dữ liệu phức tạp một cách dễ dàng. Với nền tảng này, giờ đây bạn có thể khám phá các tính năng nâng cao như quyền tùy chỉnh, phân trang và xác thực trong DRF.