Django REST frameworkで爆速API開発 導入編
エンジニアの島袋です。
DjangoのパッケージであるDjango REST frameworkを使用したWeb APIの開発について、何回かに分けて書いていきたいと思います。
日本語での資料が少なかったので公式ドキュメントとソースコードを見ながら、なんとかかんとか確率させたノウハウっぽいことを紹介していきます。
今回の導入編はほぼほぼ公式チュートリアルの簡略だけど、きっと需要はある...はず。
ちなみに爆速なのは開発スピードであって、APIのレスポンスタイムではないです。
環境構築
さらっと環境を構築します。それぞれの詳しい説明が欲しい人は検索しましょう。
Mac前提で書いてはありますが、WindowsでPytonの環境を入れている人であれば問題ないはずです。
pyenv / pyenv virtualenv
Macにデフォルトで入っているPythonは2系なので、3系の環境と使い分けしやすいように pyenv と pyenv-virtualenv を導入。
Homebrewで入れていきますが、最低3系が動けば良いので無くても(たぶん)大丈夫。
今回は現時点でほぼ最新の3.5.1にします。
# Homebrewでインストール brew install pyenv brew install pyenv-virtualenv # 作業用ディレクトリの作成・移動 mkdir test-django-rest cd test-django-rest # 該当のPythonバージョンをインストール pyenv install 3.5.1 # 作業用ディレクトリ以下でのPython環境を設定 pyenv virtualenv 3.5.1 test pyenv local test # バージョンの確認 pyenv version python -V
最後のコマンドでPython 3.5.1
と出ればOK。
pip
必要なパッケージのインストール。
# pip自体をとりあえず最新に pip install -U pip setuptools # 下記2つが今回の主役 pip install django pip install djangorestframework
Project start
さくっとDjangoプロジェクトを作成。
django-admin startproject tutorial django-admin.py startapp quickstart python manage.py migrate # 管理ユーザ作成(あとでログインに使うのでIDとパスは覚えておこう) python manage.py createsuperuser # サーバ起動 python manage.py runserver
http://127.0.0.1:8000/で起動を確認。 ここまではDjangoの導入。
Django REST framework
ここから今回の主役 Django REST framework 。
文字通りWeb APIを作成するためのフレームワーク。シンプルで強力な機能が一通り揃ってます。
Serializers
生Djangoと違うのがこのファイル。簡単に言えばどんなデータを表示するか制御するところです。
tutorial/quickstart/serializers.py
に作成。
from django.contrib.auth.models import User, Group from rest_framework import serializers class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ('url', 'username', 'email', 'groups') class GroupSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Group fields = ('url', 'name')
Views
Django REST frameworkには、モデル(DB)駆動型の特性を最大限に活かすために色んなクラスが用意されています。
今回はチュートリアルなのでオーソドックスにModelViewSet
を使用します。
from django.contrib.auth.models import User, Group from rest_framework import viewsets from quickstart.serializers import UserSerializer, GroupSerializer class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer class GroupViewSet(viewsets.ModelViewSet): queryset = Group.objects.all() serializer_class = GroupSerializer
URLs
Djangoのルーティングを設定します。場所はtutorial/urls.py
from django.conf.urls import url, include from rest_framework import routers from quickstart import views router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) router.register(r'groups', views.GroupViewSet) urlpatterns = [ url(r'^', include(router.urls)), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) ]
Settings
最後にtutorial/settings.py
を設定したら準備はOK。
INSTALLED_APPS = ( ... 'rest_framework', ) REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), 'PAGE_SIZE': 10 }
ログイン
上記設定が終われば、もう一度サーバを起動させてhttp://127.0.0.1:8000/api-auth/login/からpython manage.py createsuperuser
で作成したユーザでログインしてみましょう。
ログイン後、http://127.0.0.1:8000/を確認して、下記のようなページが表示されればチュートリアルは完了です。
ちなみにCLIから確認する場合は下記のようなコマンドになります。
curl -H 'Accept: application/json; indent=4' -u [USER]:[PASS] http://127.0.0.1:8000/
まとめ
Django REST frameworkはDjangoの設計思想を反映して短いコードで迅速な開発が可能な素敵なフレームワーク。
もともとDjangoで開発していてAPIも、という場面で活躍してくれるはずです。
導入も簡単でブラウザでの確認作業も行えるので、ぜひとも試して下さい。
次回は開発編をお届け予定。