Webエンジニアの日常とリーグオブレジェンド

Webエンジニアとして働いている猫のブログ。EmacsとMySQLとリーグオブレジェンド(LoL)が好物。主に技術的な記事かLoLの記事を書く。

Home - Django REST framework の簡単な日本語訳

f:id:yoshiki_utakata:20190817135503p:plain

原文

Django REST Framework

https://www.django-rest-framework.org/

Django REST framework

Django REST framework は強力な Web API 開発のツールです。

REST framework をなぜ使うのか

  • ブラウザでAPIを確認できるのでどんな開発者でも使いやすい
  • OAuth1a や OAuth2 のような認証機能が入っている
  • ORMを使っている場合も使っていない場合も、両方シリアライズ可能である
  • どこまででもカスタマイズ可能
  • 膨大なドキュメントとコミュニティサポート
  • Mozilla, Red Hat, Heroku, Eventbrite など世界的企業で使われている

Requirements

REST frameworkは以下の環境が必要になります

  • Python (3.5, 3.6, 3.7)
  • Django (1.11, 2.0, 2.1, 2.2)

DjangoとPythonについては最新版を利用することを強くおすすめします。

以下はオプショナルです

  • coreapi (1.32.0+) - スキーマ生成
  • Markdown (3.0.0+) - API仕様をブラウザで見た時のマークダウン
  • Pygments (2.4.0+) - マークダウンでのシンタックスハイライト
  • django-filter (1.0.1+) - フィルタリング
  • django-guardian (1.1.1+) - オブジェクト単位での権限管理

Installation

オプショナルなパッケージも含めてpipでインストールできます。

pip install djangorestframework
pip install markdown       # Markdown support for the browsable API.
pip install django-filter  # Filtering support

あるいは github から clone してくてもよいです。

git clone https://github.com/encode/django-rest-framework

INSTALLED_APPSrest_framework を追加してください。

INSTALLED_APPS = [
    ...
    'rest_framework',
]

もし Browsable API を使おうとしていて、ログイン・ログアウトのビューがほしい場合は、下記を urls.py に追記してください。

urlpatterns = [
    ...
    url(r'^api-auth/', include('rest_framework.urls'))
]

URLのパスは好きなものにしてよいです。

Example

REST frameworkを使って、モデルベースのAPIを簡単に作ってみましょう。

ユーザーの情報を読み書きするAPIを作ります。

REST framework の設定は REST_FRAMEWORK という名前のdict以下に書きましょう。まず、settings.py に下記を追加します。

REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

INSTALLED_APPSrest_framework を追加しておくのも忘れないようにしてください。

これでAPIを作成する準備はできました。url.py を下記のようになりました。

from django.conf.urls import url, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets

# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ['url', 'username', 'email', 'is_staff']

# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

これでもう、 http://127.0.0.1:8000/ で 'users' APIが動いています。右上のボタンからログインすれば、追加・削除などもできるようになります。

Quickstart

早く利用したければクイックスタートガイドを読むと良いでしょう。

Development

REST framework を開発したければコントリビュートガイドラインを読んでください。

Support

サポートが欲しい場合はREST frameworkのディズ化ッショングループを利用してください。irc.freenode.netの #restframework チャンネルを利用したり、IRCのアーカイブを検索したり、django-rest-framework タグをつけてStack Overflowに質問を上げてみてください。

優先的にサポートを受けたい場合はproプランか、スポンサープランに登録してください。

REST framework の開発にかんする最新情報は、作者のtwitterを見てください。

Security

もし Django REST framework のセキュリティの問題を発見したら、パブリックフォーラムにissueを上げないでください。問題をemail経由で送信してください。必要であればメンテナーが修正し、その後公開されます。