Django REST Framework ile Django'da RESTful API'ler Oluşturma

Django REST Framework (DRF), web API'leri oluşturmak için güçlü ve esnek bir araç takımıdır. Serileştiriciler, görünüm kümeleri ve kimlik doğrulama mekanizmaları gibi özellikleri kullanıma hazır olarak sunarak RESTful API'leri oluşturma sürecini basitleştirir.

Django REST Çerçevesini Kurma

Bir RESTful API oluşturmadan önce, Django REST Framework'ü yüklemeniz ve projenize eklemeniz gerekir. DRF'yi yüklemek için aşağıdaki komutu çalıştırın:

pip install djangorestframework

Daha sonra settings.py dosyanızdaki INSTALLED_APPS dizinine 'rest_framework' ekleyin:

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

Basit Bir API Oluşturma

Book adlı basit bir model için bir API oluşturalım. İlk adım, modeli models.py: içinde tanımlamaktır.

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

Modeli tanımladıktan sonra veritabanı tablosunu oluşturmak için geçişleri çalıştırın:

python manage.py makemigrations
python manage.py migrate

Bir Serileştirici Oluşturma

DRF'deki serileştiriciler, Django modelleri gibi karmaşık veri tiplerini JSON'a dönüştürür. Book modeli için bir serileştirici oluşturun:

from rest_framework import serializers
from .models import Book

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

Bina Görünümleri ve URL'ler

DRF, API görünümleri oluşturmak için iki ana yol sağlar: fonksiyon tabanlı görünümler ve sınıf tabanlı görünümler. Burada, APIView: ile sınıf tabanlı görünümleri kullanırız.

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)

Daha sonra, bu görünüm için URL'leri urls.py: dosyasında yapılandırın:

from django.urls import path
from .views import BookListCreateAPIView

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

API'yi test etme

Sunucu çalışırken, Postman veya curl gibi araçları kullanarak API'yi http://127.0.0.1:8000/books/ adresinde test edebilirsiniz. Bir GET isteği tüm kitapları alır ve bir POST isteği yeni bir kitap oluşturmanıza olanak tanır.

API'yi ViewSet'lerle geliştirme

Daha öz ve yeniden kullanılabilir kod için DRF'nin ViewSet ve Router'sını kullanabilirsiniz. API'yi ModelViewSet kullanacak şekilde güncellemenin yolu:

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

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

Daha sonra urls.py: dosyasında yönlendiriciyi yapılandırın:

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

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

urlpatterns = router.urls

Çözüm

Django REST Framework, sağlam ve esnek RESTful API'ler oluşturmayı kolaylaştırır. Serileştiriciler, görünümler ve yönlendiriciler kullanarak karmaşık veri modellerini kolaylıkla işleyen API'ler oluşturabilirsiniz. Bu temelle artık DRF'de özel izinler, sayfalama ve kimlik doğrulama gibi gelişmiş özellikleri keşfedebilirsiniz.