Django REST フレームワークを使用して Django で RESTful API を作成する

Django REST Framework (DRF) は、Web API を構築するための強力で柔軟なツールキットです。RESTful API の作成プロセスを簡素化し、シリアライザー、ビューセット、認証メカニズムなどの機能をすぐに使えるように提供します。

Django REST フレームワークの設定

RESTful API を作成する前に、Django REST Framework をインストールしてプロジェクトに追加する必要があります。次のコマンドを実行して DRF をインストールします。

pip install djangorestframework

次に、settings.py ファイルの INSTALLED_APPS に 'rest_framework' を追加します。

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

シンプルなAPIの作成

Book というシンプルなモデルの API を作成しましょう。最初のステップは、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

モデルを定義した後、移行を実行してデータベース テーブルを作成します。

python manage.py makemigrations
python manage.py migrate

シリアライザーの作成

DRF のシリアライザーは、Django モデルなどの複雑なデータ型を JSON に変換します。Book モデルのシリアライザーを作成します。

from rest_framework import serializers
from .models import Book

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

ビューと URL の構築

DRF では、関数ベースのビューとクラスベースのビューという 2 つの主な方法で API ビューを作成できます。ここでは、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)

次に、urls.py でこのビューの URL を設定します。

from django.urls import path
from .views import BookListCreateAPIView

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

APIのテスト

サーバーが稼働している状態で、Postman や curl などのツールを使用して、http://127.0.0.1:8000/books/ で API をテストできます。GET リクエストではすべての書籍が取得され、POST リクエストでは新しい書籍を作成できます。

ViewSets による API の強化

より簡潔で再利用可能なコードには、DRF の ViewSetRouter を使用できます。ModelViewSet を使用するように API を更新する方法は次のとおりです。

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

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

次に、urls.py でルーターを設定します。

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

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

urlpatterns = router.urls

結論

Django REST フレームワークを使用すると、堅牢で柔軟な RESTful API を簡単に作成できます。シリアライザー、ビュー、ルーターを使用することで、複雑なデータ モデルを簡単に処理する API を構築できます。この基盤により、DRF のカスタム権限、ページ区切り、認証などの高度な機能を探索できるようになりました。