Djangoは、Python言語で書かれたオープンソースのWebアプリケーションフレームワークとして、REST APIを構築するためのDjango REST Framework(DRF)を提供しています。本文では、Django REST Frameworkを使用して効率的にREST APIを作成する方法を皆さんに紹介します。
また、多用途のAPI管理ツールのApidogをDjangoフレームワークと併用して、APIのテストやデバッグをより効率的に実現するソリューションをも一緒に紹介していきたいと思います。
DjangoとREST APIについて
REST API作成の際にDjangoはよく使われるフレームワークになります。この記事では、まずは、DjangoフレームワークとREST APIの基本情報を皆さんに紹介します。
Djangoフレームワークとは
DjangoはPython言語で書かれたオープンソースのWebアプリケーションフレームワークです。以下のような特徴があります。
- MVC(Model-View-Controller)アーキテクチャを採用しているため、Webアプリケーション開発が効率的に行える
- Object Relational Mapper(ORM)を内包しているため、データベースをPythonから扱いやすい
- 管理サイト機能が標準装備されている
- URLルーティング、ビュー、テンプレート、フォームなどのコンポーネントが揃っている
- 国際化対応が容易
- 大規模サイト構築にも対応可能な拡張性を備える
DjangoはYouTube、Instagram、Dropboxなどの大規模サイトでも利用されており、PythonによるWeb開発のためのデファクトスタンダードとして位置付けられています。初心者にも学習しやすい構造になっているため、Pythonを使ったWebアプリケーション開発の入門に適していると言えます。
REST APIとは
REST(Representational State Transfer)は、Webサービスを設計・開発するためのアーキテクチャスタイルの1つです。REST APIとは、RESTの原則に従って設計されたWeb APIのことを指します。
REST APIの主な特徴は以下の通りです。
- HTTPプロトコルをベースとする
- 状態レスでクライアントのコンテキストをサーバーが保持しない
- アドレスによってリソース(データ)を特定する
- レスポンスに適切なステータスコードを用いる
- 表現にXMLやJSONなどを用いる
REST APIはこれらの特徴により、スケーラブルで拡張しやすいAPIを実現できます。Web APIの開発においてはほぼ標準的なアーキテクチャと言えます。
Django REST Framework(DRF)について
Django REST Framework(DRF)は、DjangoでREST APIを構築するための強力な Toolkit です。DRFを使うことで、Djangoで高品質なREST APIを素早く開発できるようになります。大規模なAPI開発においてはデファクトスタンダードとして位置付けられています。その主な特徴は以下の通りです。
APIの構築を支援する様々なクラスとツールが用意
- Serializerクラスでオブジェクトのシリアライズ/デシリアライズ
- Viewsetクラスでビューの定義
- 認証、パーミッション、スロットリングなどの機能
Web APIのベストプラクティスを反映した設計
- HTTPメソッドの明示的なマッピング
- ウェブブラウザからのブラウザビリティ
- ハイパーリンク付きのAPI
Djangoの既存の機能との親和性が高い
- Djangoの汎用ビューとシームレスに統合
- Djangoの認証フレームワークと連携
- 豊富なドキュメントと活発なコミュニティ
DjangoフレームワークでRESTful APIを作成する方法
それでは、DjangoフレームワークでRESTful APIを作成するには、どうしたらいいですか?次は、Django REST Frameworkを使って、RESTful APIを効率的に作成する操作手順を皆さんに紹介します。
REST APIのビルドを開始する前に、Pythonがパソコンにインストールされていることを確保する必要があります。それでは、次の操作手順を参照して、REST APIの作成を開始しましょう。
Step 1. DjangoとDjango REST Frameworkのインストール
まず、ターミナル、コマンドプロンプトなどのコマンドラインツールを利用して、Django、Django REST Frameworkをインストールします。
pip install django djangorestframework
Step 2. Djangoプロジェクトの作成
次のコマンドを利用して、プロジェクトファイルの保存用のプロジェクトディレクトリを作成します。
mkdir projectname
そして、次のコマンドを利用して、Djangoプロジェクトを初期化します。
django-admin startproject projectname
Step 3. プロジェクトディレクトリに移動
次のコマンドを利用して、作成したプロジェクトのディレクトリに移動します。
cd projectname
Step 4. Djangoアプリの作成
Djangoアプリを作成してAPIを実装します。
python manage.py startapp appname
Step 5. モデルの定義
models.pyでAPIで扱うデータのモデルを定義します。例えば、以下のようにItemモデルを定義できます。
from django.db import models
class Item(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
このモデルは2つのフィールドを持っています。
- name - 100文字以下の文字列を保存できるCharField
- description - 無制限のテキストを保存できるTextField
Step 6. マイグレーションの実行
マイグレーションを実行してデータベースのテーブルを作成します。
python manage.py makemigrations
python manage.py migrate
Step 7. シリアライザの作成
serializers.pyでモデルのシリアライザを定義します。例えば、次のようにrest_frameworkとモデルからSerializerをインポートしてItemSerializerクラスを定義できます。これはModelSerializerを継承したSerializerです。
from rest_framework import serializers
from .models import Item
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = '__all__'
ここでは、モデルはItemに指定し、fieldsに__all__
を設定することで、モデルの全フィールドをシリアライズの対象としています。
このSerializerをViewで使うことで、ItemオブジェクトをJSONなどの形式でシリアライズしたり、リクエストデータをデシリアライズしてItemオブジェクトを作成したりできるようになります。
Step 8. ViewSetによるビューの作成
views.pyでViewSetを使ってAPIのビューを定義します。
from rest_framework import viewsets
from .models import Item
from .serializers import ItemSerializer
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
Step 9. URLの設定
urls.pyでビューとURLのマッピングを設定します。
from rest_framework import routers
from .views import ItemViewSet
router = routers.DefaultRouter()
router.register(r'items', ItemViewSet)
urlpatterns = router.urls
そして、プロジェクトのurls.pyでこれらのURLを全て含めるようにします。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('appname.urls')),
]
Step 10. 開発サーバの起動
開発サーバを起動してAPIにアクセスできるようにします。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('appname.urls')),
]
APIのエンドポイントURLは、http://localhost:8000/api/items/のようなものになりますが、そのURLは自分の設定に従うものになります。そして、このエンドポイントのURLを利用して、ApidogなどのGUIのAPI管理ツールでより効率的にテストしたり、ドキュメント化したりすることができます。
対応するファイルを作成した後、プロジェクトのディレクトリは、次のように見えます:
Apidog:Djangoフレームワークに互換するAPI管理ツール
Django RESTフレームワークを使って、REST APIを作成すると、ApidogというDjangoフレームワークに完璧に互換なAPI管理ツールを使用することがおすすめです。Apidogを使うメリットは主に以下のような点があります。
- APIのテスト・デバッグがしやすい
Apidogを使うと、APIのリクエストを簡単に送信し、レスポンスを確認できます。開発段階ではDjangoの開発サーバーに対してテストを直感的で簡単に行えるので便利です。
- APIドキュメントの作成が楽々
ApidogでAPIのリクエストとレスポンスを保存しておくと、それを基にAPIドキュメント(API仕様書)を自動生成できます。
- コラボレーションも楽々
Apidogのチーム機能を利用すると、APIの定義やテスト結果をチーム内でシームレスに共有できます。
- APIテストの自動化もできる
Apidogでテストのシナリオを作成して、作成したリクエストとAPIをテストステップに簡単に設定して自動テストを簡単に実現できます。
- 多機能
他にも、APIの認証、環境変数、前・後処理など、APIテストに必要な機能が揃っています。
DjangoだけではAPI開発に不便な点がありますが、Apidogと併用することで補完できるため、API開発効率が大きく向上します。
ApidogでDjangoフレームワークで作成したAPIを効率的に管理可能
それでは、Apidogという便利なGUIツールを使って、Djangoフレームワークで作成したAPIを簡単にテストしたり、管理したりする方法を皆さんに紹介します。
APIの単体テスト
Apidogを開き、リクエストを新規に作成すると、エンドポイントのURLを入力した上、必要なパラメータなどの情報を入力すると、簡単にリクエストを送信してレスポンスを取得できます。これにより、Djangoフレームワークで開発してきたAPIの疎通確認を簡単に行うことできます。
また、Apidogにレスポンスの「自動検証」という機能も備えています。この機能は、返されたレスポンスが事前に定義したステータスコードとデータ構造に一致しているかどうかをを自動的に判定することもできるので、テスト面から言うと、非常に便利です。
APIテストの自動化
Apidogの自動テスト機能を使うことで、テストシナリオを簡単に作成できます。そして、テストシナリオで、保存したAPIとリクエストをテストステップとして追加することができます。そして、テストステップそれぞれの実行条件を個別にカスタマイズすることも可能です。最後に「実行」ボタンをクリックして、各APIを設定の条件に従って一つ一つ呼び出すことができます。
まとめ
DjangoはPythonでのWebアプリケーション開発において、REST API構築でもデファクトスタンダードの位置づけにあるフレームワークです。Django REST Frameworkを使うことで、シンプルかつ直感的にREST APIを開発することができます。本記事では、Django REST Frameworkを使ったREST APIの開発手順を具体的に解説しました。モデルとシリアライザの定義から、ViewSetsによるビューの作成、URL設定等の一連の流れを理解することができました。
また、API開発を補完するツールとして、Apidogという使いやすいGUIツールがおすすめです。Apidogを使うことで、APIのテスト、ドキュメント作成、自動化などを効率的に行うことができ、Django単体では難しい開発プロセスをサポートしてくれます。