初心者のためのDjango入門
■第7話:APIサーバーとしてのDjango(Django REST Framework)
(最終更新日:2022.06.01)
(絵が小さい場合はスマホを横に)
「APIってなに?」
「APIってよく聞くけど分からない。なんか難しそう。」「自分でも作れるの?」
プログラミングを始めたばかりの方はこう思うことも多いかもしれない。
今回はDjangoにおけるAPIサーバーの構築方法を説明する。
1RESTful APIとAPIサーバーの意義
まずはAPIの説明をする。 APIとは、Application Programming Interfaceの略で、プログラムを外部で共有できるように公開したものである。 Twitter等の有名なAPIを思い浮かべれば分かると思うが、 公開されているルールに従ってデータを送ればtweetすることもできるし、流れている情報を見ることもできる。 外部からこの範囲で使っていいですよという入口のようなイメージを持ってくれればと思う。 APIを使えば外部サービスを自分のサイトで利用することもできるし、自分のサービスを提供することもできる。
次にRESTの説明をする。
RESTには4つの原則というものがあって、2000年にロイ・フィールディングが提唱した。
あくまで原則なので厳密なルールではない。「この考え方に沿って作りましょう」というものである。
火事で避難する際の「おかしひも」のようなものだ。RESTについて詳しく知りたい方は、
このサイトを見てほしい。
データ形式はJSONに決まってる訳ではなく、XMLでもRESTに当てはまる。
ただし、一般的にRESTful APIと言ったらJSON形式でのやり取りを指すので、JSONを扱うと思って良いだろう。
普段使ってるHTTPがHTMLでやり取りするので、軽いデータ形式で送受信できるものだと考えれば良い。
REST APIサーバーとは、外部サービスとJSONでやり取りするものである。
下記に気象庁の予報データを利用する例を示す。スマホアプリでもブラウザでも簡単に東京都の天気の情報を利用できる。
APIの利用例
2.Django REST frameworkとDjangoの違い
前項でREST APIサーバーのイメージは沸いたと思う。
ここでは、DjangoのREST APIサーバー(Django REST framework)と通常のDjangoの違いについて説明する。
この点を理解するには、下記のような構造の違いを見るのが早いと思う。
第4話のDjangoのアーキテクチャーの図で示したように、urls.pyまでは構造が同じである。
ルーティング(urls.py)とモデル(models.py)の間が、ビュー(views.py)からapis.pyとserializers.pyに変わった所が異なる。
serializers.pyは、モデルから取得したデータをJSON形式に変換をする。
フィールド(項目)の選択もここで行う。
apis.pyは通常のDjangoのviews.pyに当たる部分である。
対象とするモデルを選択したり、データ変換のロジックを示したり、認証を定義したりする場所である。
CRUD操作の何を許可するかということも決めている。
urls.pyは通常のDjangoと共通であるが、ここはエンドポイント(接続場所)を示すことになる。
ここにアクセスすれば、データを送受信できるということである。
次項で実際の例を交えて説明する。
DjangoとDjango REST Frameworkの違い
3.Django REST frameworkの導入方法
Django REST Frameworkは別途、pipでのインストールが必要となる。「pip install djangorestframework」と入力してインストールしよう。 インストールしたら、setting.pyのINSTALLED_APPの一番最後に「'rest_framework'」と追加しよう。これで使う準備は万端だ。
4.Django REST frameworkの使い方
Django REST frameworkは実際以下のように記述する。 左上がModel、右上がSerializer、左下がAPIView(apis.py)、右下がurls.pyである。 ModelはTableの項目を定義していてDjangoと変わらない。Serializerでは、対象とするTableの項目を設定している。 APIViewでは、Serializerの選択や認証の設定をしている。urls.pyではJSONデータを取得できるエンドポイントを定めている。
Django REST Frameworkの記述例
実際、エンドポイントにアクセスして、データを取得した例が左下に示す。 エンドポイントへは、JavaScript(AxiosやAjax)でアクセスしてデータを取得、加工する。 ここでは都市のデータと天気、気温を取得して表示した。 また、右下はエンドポイントへ直接アクセスした時の表示である。 Django REST Frameworkは単なるJSONではなく、GUIも自動で生成してくれる。 このGUIを用いて権限情報やPOST時の挙動を調べることができる。
Django REST Frameworkの記述例
▼参考図書、サイト
「現場で使えるDjango REST Framework の教科書」 横瀬明仁
APIを基礎からしっかりと学び、Django Rest Frameworkで天気情報を取得するアプリを作ろう Udemy(大橋 亮太 古田 薫)
REST APIとは?ざっくりと理解してみる【初心者向け】 Wiz テックブログ
【Python】Web APIをDjango REST frameworkを用いて実装する方法 DXCEL WAVE
【入門編】Django REST frameworkとは?チュートリアルで解説 Udemyメディア