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

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

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

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

```terminal:terminal
$ pip install django
```


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

```terminal:terminal
$ pip install djangorestframework
```

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

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


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

```terminal
$ pip install djangorestframework-simplejwt
```
####settings.py

```python: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でしか動きません。
####インストール方法
```terminal
$ pip install djoser
```
####settings.py

```python:settings.py
INSTALLED_APPS = [
    'djoser',
]
```
##pillow
画像処理ライブラリ。画像を扱うときに使います。
リサイズや回転など簡単な処理を楽に行える。
顔認証など高度な処理はできませんので注意。
####インストール方法

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

```terminal
$ pip install django-cors-headers
```
####settings.py

```python: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と連携する。](https://qiita.com/hayashi0207/items/8bdc0c232c4203c92d6f)
最後まで読んでいただきありがとうございました。

#参考文献
[Django Rest Framework で JWTによるAPIの認証機能を実装](https://qiita.com/Ajyarimochi/items/c6274c4aa8f21f573265)