実践DRF:Django REST Frameworkを使ったREST APIの基礎

やりたいこと

RESTAPIの基礎を学んで、DRFを使用して簡単なRESTAPIの作成!

1. REST APIの基本概要

REST API(Representational State Transfer API)は、Webサービス間でデータをやり取りするための設計スタイルのこと。
以下のような原則を持つことで、シンプルかつスケーラブルなシステム設計を実現する。

リソース指向

:すべてのデータは「リソース」として扱われ、URLを通じてアクセスされる。
例えば、/users/posts のように、それぞれのエンティティがリソースとして定義される。

HTTPメソッドの活用

:操作の種類に応じてHTTPメソッドを使い分ける。

  • GET: リソースの取得
  • POST: リソースの新規作成
  • PUT/PATCH: リソースの更新
  • DELETE: リソースの削除

ステートレス性

:サーバーはリクエスト間で状態を持たず、すべての情報はリクエストに含まれる。
これにより、スケーラビリティが向上する。

なぜステートレスにするのか

昔の情報をとっておいたままにするとその分管理コストがかかる。
ステートレスにすることでよりシンプルな設計にすることができる!

2. Django REST Framework (DRF)の概要

Django REST Framework(DRF)は、DjangoでREST APIを構築するためのライブラリ。
Djangoと統合しやすく、シリアライザーやビューセットなど、API開発を効率化するための多くの機能を提供。

シリアライザー(Serializers)

:データの入力と出力をシリアル化(JSONなどの形式に変換)するための機能。
DjangoモデルのデータをJSONに変換したり、逆にJSONをDjangoモデルに変換したりすることが可能。

ビューセット(ViewSets)

:CRUD操作を自動的に実装するためのビュークラスのセット。
ビューセットを使用すると、GET /users/POST /users/ などのエンドポイントを簡単に作成可能に。

ルーティング(Routers)

:ビューセットとシリアライザーをまとめ、エンドポイントへのルーティングを簡潔に設定できる機能。

3. 基本的なDRFの実装例

DRFの実装を通して具体的なコードを紹介。ここでは、簡単な「記事管理API」を作成する。

1.モデルの作成

まず、Post モデルを作成し、記事のタイトルや内容、作成日を保持。

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return self.title

シリアライザーの作成

次に、PostSerializer を作成し、Post モデルのデータをJSONにシリアライズします。

from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

ビューセットの作成

Post モデルのCRUD操作を行うビューセットを作成します。

from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer

class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

ルーティングの設定

ルーターを用いてURLを設定します。urls.py ファイルに以下を記述する。

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import PostViewSet

router = DefaultRouter()
router.register(r'posts', PostViewSet)

urlpatterns = [
    path('', include(router.urls)),
]


/postsでAPIリクエスト送ると、postテーブルへのCRUD操作が可能に!


4. DRFの便利機能の紹介

DRFには、便利な追加機能が多くある。いくつかの実用例を以下に紹介。

  • 認証と認可:JWT(JSON Web Token)を使ったトークン認証や、OAuth2認証といったさまざまな認証方式に対応。
  • APIドキュメント生成:DRFはSwaggerやRedocを使ってAPIドキュメントを自動生成する機能をサポートしています。これにより、APIのエンドポイントやパラメーターの詳細が一目でわかる。
  • フィルタリングと検索DjangoFilterBackend を使ってリソースのフィルタリングや検索が可能。例えば、GET /posts?title=example でタイトルに「example」が含まれる記事を取得可能に。
  • ページネーション:リソースをページ単位で取得するためのページネーションも簡単に実装可能。リクエストURLに ?page=2 といったパラメーターを付けるだけで、2ページ目のデータが取得できる。

5. REST APIとDRFの実用例

実際にREST APIとDRFが利用されるケースや、導入のメリットについて触れると読者の理解が深まります。

フロントエンドとの連携

:REST APIはReactやVue.jsなどのフロントエンドフレームワークと相性が良く、データを効率的にやり取りできます。例えば、Reactを用いたシングルページアプリケーション(SPA)のバックエンドとしてDRFを使用するケースが一般的。

モバイルアプリのバックエンド

:REST APIは、AndroidやiOSアプリのバックエンドとしても適しています。スマートフォンアプリからのリクエストをDRFが処理し、データベースから必要なデータを取得して返す流れが一般的です。

マイクロサービス

:REST APIはマイクロサービスアーキテクチャにも有効で、各サービスが独立したAPIを持つことで、システム全体のスケーラビリティやメンテナンス性が向上します。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です