読者です 読者をやめる 読者になる 読者になる

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/を確認して、下記のようなページが表示されればチュートリアルは完了です。 f:id:i-plug-develop:20161011174730p:plain

ちなみにCLIから確認する場合は下記のようなコマンドになります。

curl -H 'Accept: application/json; indent=4' -u [USER]:[PASS] http://127.0.0.1:8000/

まとめ

Django REST frameworkはDjangoの設計思想を反映して短いコード迅速な開発が可能な素敵なフレームワーク
もともとDjangoで開発していてAPIも、という場面で活躍してくれるはずです。
導入も簡単でブラウザでの確認作業も行えるので、ぜひとも試して下さい。

次回は開発編をお届け予定。

参考URL