🎃

DjangoでシンプルなRESTful Web APIを作成してみた

2024/05/22に公開

Django REST frameworkを使用して、シンプルなRESTful Web APIを作成する方法について説明します。この記事では、TodoリストのAPIを例に、モデルのシリアライザ作成の理由に触れながら、APIの作成手順を説明し、Postmanでの動作確認方法も紹介します。

前提条件

  • Pythonがインストールされていること
  • Djangoがインストールされていること

モデルの作成

まず、シンプルなモデルを作成します。ここでは、Todoリストのモデルを作成します。

myapp/models.pymyapp
from django.db import models

class Todo(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.title

シリアライザの作成

シリアライザは、モデルインスタンスとJSONなどのデータ形式との変換を行うために使用されます。APIはクライアントとサーバー間でデータをやり取りするため、モデルをシリアライズする必要があります。これにより、データを簡単に送受信できる形式に変換します。

myapp/serializers.py
from rest_framework import serializers
from .models import Todo

class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo
        fields = '__all__'

ビューの作成

ビューセットを使用して、APIのエンドポイントを作成します。ビューセットは複数のビューをまとめて管理するのに便利です。

myapp/views.py
from rest_framework import viewsets
from .models import Todo
from .serializers import TodoSerializer

class TodoViewSet(viewsets.ModelViewSet):
    queryset = Todo.objects.all()
    serializer_class = TodoSerializer

ルーティングの設定

ルーティングを設定して、ビューセットへのアクセスURLを指定します。

myapp/urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from myapp.views import TodoViewSet

router = routers.DefaultRouter()
router.register(r'todos', TodoViewSet)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include(router.urls)),
]

マイグレーションの実行

python manage.py makemigrations
python manage.py migrate

サーバーの起動

開発サーバを起動します。

python manage.py runserver

これで、'http://127.0.0.1:8000/api/todos/' でTodoリストのAPIにアクセスできるようになります。このAPIでは、GET、POST、PUT、DELETEリクエストを使ってTodoアイテムを操作できます。

Postmanでの動作確認

  1. Postmanのインストールと起動
  • Postmanをダウンロードし、インストールします。インストールが完了したら、Postmanを起動します。
  1. GETリクエストの送信
  • Postmanで新しいリクエストを作成し、'http://127.0.0.1:8000/api/todos/' にGETリクエストを送信します。
  • 初回は空のリストが返ってきます。
  1. POSTリクエストの送信
{
    "title": "Sample Todo",
    "description": "This is a sample todo item.",
    "completed": false
}

実際の画面は以下のような感じになると思います。

  • リクエストを送信すると、新しいTodoアイテムが作成されます。
    こんな感じで結果が返ってくるはずです。

  1. GETリクエストで確認
  • 再度GETリクエストを送信して、新しいTodoアイテムがリストに表示されることを確認します。

  1. PUTリクエストで更新
{
    "title": "Updated Todo",
    "description": "This is an updated todo item.",
    "completed": true
}
  • アイテムが更新されることを確認します。
  1. DELETEリクエストで削除
  • 削除したいアイテムのIDを使って、'http://127.0.0.1:8000/api/todos/1/' にDELETEリクエストを送信します。
  • アイテムが削除されることを確認します。

最後に

Djangoを使用してシンプルなRESTful Web APIを作成し、POSTMANで動作確認する手順は完了です。これを基に、さらに機能を追加したり、認証やフィルタリングなどの機能を実装したりすることができます。
djangoでwebアプリ作ってましたが、最近は時間があまり取れないので、シンプルなWebAPIを作ってRESTfulなAPIを忘れないようにしてます。

Discussion