【Python】REST APIの必須,便利ライブラリまとめ


はじめに

PythonでREST APIを作成する際に必要,便利なフレームワークまたはライブラリに関する記事です。
この記事ではPythonのwebフレームワークのDjangoを使います。
Flaskは別で出そうかなと考えています。
またDjangoで各ライブラリ,フレームワークを使用するには、インストールをしてsettings.pyを編集する必要があります。
※settings.pyとはDjangoプロジェクト作成時に自動生成されるファイルでミドルウェアやライブラリなどの設定を行うものです。
なので今回は各ライブラリの紹介と環境構築方法をまとめました。
間違いなどありましたら容赦無くご指摘ください。

それでは見ていきましょう!!

Django

Webフレームワーク。
Webアプリケーションに必要なありとあらゆるモジュールが用意されています。
例えばディレクトリのパスやデータベースを楽に扱うなどなど。
これがないと始まらない。

インストール方法

terminal
$ pip install django

Django Rest framework

REST APIに必要なモジュールの集まり。
DBのデータをJSON形式に変換する機能などなど。
挙げ出したらキリないです。
これも必須。

インストール方法

terminal
$ pip install djangorestframework

settings.py

settings.py
INSTALLED_APPS = [
    'rest_framework',
]

以上のようにINSTALLED_APPSに1行追加する。
INSTALLED_APPS
アプリケーションを定義することで、djangoに認識させることができます。
マイグレーションファイル作成時などに利用されるパラメータ。

以降INSTALLED_APPSの説明は省略します。

SimpleJwt

JWT(Json Web Token)はデータの改ざんを検知できます。
主に認証トークンで使われる。
セキュリティの範疇なので地味ですが、ポートフォリオでもちゃんと使った方がいいと思います。

インストール方法

$ pip install djangorestframework-simplejwt

settings.py

settings.py
from datetime import timedelta

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES':[
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}

SIMPLE_JWT = {
    'AUTH_HEADER_TYPES':('JWT'),
    'ACCESS_TOKEN_LIFETIME':timedelta(minutes=30),
}

REST_FRAMEWORK
API用のライブラリを定義することでdjangorestframeworkに認識させる。
DEFAULT_PERMISSION_CLASSES
アクセス許可を判断するクラスを指定する。
DEFAULT_AUTHENTICATION_CLASSES
認証に使うクラスを指定する。
rest_framework.permissions.IsAuthenticated
全てのリクエストに対してリクエストが必要。
rest_framework_simplejwt.authentication.JWTAuthentication
SIMPLEJWTを定義。
SIMPLE_JWT
SIMPLE JWTに関する設定を行うことができる。
AUTH_HEADER_TYPES
トークンを指定できる。今回はJWTを指定。
ACCESS_TOKEN_LIFETIME
トークンの持続時間を設定。timedeltaオブジェクトは日時の加算減算を行う。

djoser

djangoのサードパーティーモジュール。
登録、ログイン、ログアウト、パスワードリセットなど認証周りをサポートしてくれるモジュール。
名前の雰囲気の通り、django専用なのでdjangoのRESTAPIでしか動きません。

インストール方法

$ pip install djoser

settings.py

settings.py
INSTALLED_APPS = [
    'djoser',
]

pillow

画像処理ライブラリ。画像を扱うときに使います。
リサイズや回転など簡単な処理を楽に行える。
顔認証など高度な処理はできませんので注意。

インストール方法

$ pip install pillow

CORS

フロント側からのアクセス制御を行うライブラリ。
例えばリクエスト元を制限する機能など。
日本語にするとオリジン間リソース共有。

インストール方法

$ pip install django-cors-headers

settings.py

settings.py
INSTALLED_APPS = [
    'corsheaders',
]
MIDDLEWARE = [
    #django.middleware.common.CommonMiddlewareより上に書く。
    'corsheaders.middleware.CorsMiddleware',
]
CORS_ORIGIN_WHITELIST=[
    #許可するオリジン
    "http://localhost:3000"
]

MIDDLEWARE
ミドルウェアの一覧を定義することで、HTTP処理後にdjangoが順次実行する。順次なので書く順番は大事です。
CORS_ORIGIN_WHITELIST
許可するオリジンを定義することで、他のリクエストは弾いてくれます。

最後に

これらを使えば汎用的にRESTAPIを実装できると思います。
他に必要,便利なライブラリがありましたらご指摘のほどよろしくお願い致します。
また、これらの開発環境の構築は仮想環境を想定しています。
仮想環境の構築方法が気になる方は以下の記事からさくっと構築してみてください。
Anacondaで仮想環境を作り、PyCharmと連携する。
最後まで読んでいただきありがとうございました。

参考文献

Django Rest Framework で JWTによるAPIの認証機能を実装