DjangoでRESTful APIを作る
今回はDjangoでRESTfull APIを作りたいと思います。
今回のブランチはこちら
https://github.com/dsrice/base-django/tree/API/users
概要
今回はユーザ一覧を取得できるAPIを用意することを目指します。
また、RESTful APIとして簡単に用意できるもの内容のみとします。
RESTful APIとは?
そもそもRESTとはREpresentational State Transferの略です。
分散システムにおける複数のソフトウェアを連携させるのに適した設計原則の
集合、考え方になります。
2000年にRoy Fielding氏によって提唱されています。
RESTful APIとは、パラメータを指定して特定のURLにアクセスすると、XMLやJSONなどで記述されたメッセージが送られてくるようなシステム、および、そのような呼び出し規約のことをさします。
ボヤっとしている表現になっていますが、RESTには原則とよばれるものが4つあります。
・セッションなどの状態管理を行わず、やり取りされる情報はそれ自体で完結して解釈することができる
ーWebではHTTP自体にはセッション管理の機構はない
・情報を操作する命令の体系が予め定義・共有されている
ーWebではHTTPメソッドに相当
・すべての情報は汎用的な構文で一意に識別される
-URL/URIに相当
・情報の一部として、別の状態や別の情報への参照を含めることができる(ハイパーメディア的な書式で情報を表現する)
-HTMLやXMLに相当
特に注意すべきことは最初の「セッションなどの状態管理を行わず」ですね
Webサービスを作っていて、認証後のという状態を取り扱う必要性がでてきます。
セッションにいれて扱うといったことをしている方も少なくないと思いますが、
RESTの考え方ではセッションでログイン情報を管理すると原則が壊れてしまします。
Tokenなどをheaderに入れたりして扱うようにしましょう
今回は認証問題はいったん置いておいてAPIを作ることにします。
このような段階を踏むようにしたのは、
とどちらの設定がおかしいかが、切り分けるのが大変だと考えたからです。
なので。APIを作っておき、その後認証が必要になるようにすれば
どちらがおかしいのかがわかりやすいと考えたからです。
APIを作る
前置きが長くなりましたが、やり方を書いていきます。
方法は以下のSTEPを記述します。
STEP1 Serializerを作る
STEP2 Viewを作る
STEP3 routingを設定する
の3段階です。
今回はあくまでも簡単なものの用意というスタンスです。
実際の開発時はもっと複雑なことが必要になってきますが、
今回は触れません。
STEP1 Serializerをつくる
Serializerとは、データの入出力を扱い、モデルへの橋渡しをするものです。
DjangoにはSirializerにはいろいろなタイプが用意されています。
今回は、扱いやすいModelSerializerを使います。
今回は「v1」アプリケーションにAPIを追加したいので
この中に「serializers」フォルダを作成して、この中にusers.pyファイルを作成して
以下の内容記述します。
v1/serializers/user.py
このSerializerに関してはまだまだ使い方に余地がありますが、
今回はこれだけで行きます。
ModelSerializerですが、このMetaクラスは必須です。
記述を忘れないようにしましょう。
詳細を知りたい方は、こちらからどうぞ
https://note.crohaco.net/2018/django-rest-framework-serializer/
STEP2 Viewを作る
views.pyというファイルがすでにv1アプリケーション内にありますので
こちらを以下の内容に書き換えます。
STEP3 routingを設定する。
v1アプリケーションにurls.pyを用意します。
以下の内容を記述します。
APIはこれで完成です!!!
ちょっとした解説
今回は簡単にAPIを作るということをテーマに書いたので細かい説明はせずに
方法に徹していました。
少しだけ解説をすると、今回の肝になっているのでModelViewSetです。
このViewSetを選択するとCRUD操作とメソッドと紐づける形で用意されます。
本来はユーザ情報を管理するには安易な手段ではありますが、
今回は解説用ということで、そこはノー突っ込みで行きたいと思います。
さて、メソッドとCRUD操作が紐づくというこですが、以下のようになっています。
GETメソッド → Read URL:http://localhost:8000/v1/users
POSTメソッド → Create URL:http://localhost:8000/v1/users
PUTメソッド → Update(全部) URL:http://localhost:8000/v1/users/:id
PATCHメソッド → Update(一部)URL:http://localhost:8000/v1/users/:id
DELETEメソッド → Delete URL:http://localhost:8000/v1/users/:id