diadia

興味があることをやってみる。自分のメモを残しておきます。

djangoにRESTAPIを実装する メモ

DRFAPIを扱うフレームワーク

djangoがwebフレームワークに対してdjango rest frameworkはrest apiを実装するためのフレームワークらしい。
これはCRUDが得意らしく、webアプリケーションのコンテンツを作るのに役立ちそうだ。
公式ドキュメント:https://www.django-rest-framework.org/

DRFの主要構成単位

1.model, 2.シリアライザ, 3.view, 4.URFconfが主要な構成単位だ。これに加えてsettings.pyで諸所の設定項目を定めることでREST API機能を実装していくイメージとなる。

使い方

参照:https://www.django-rest-framework.org/#installation

 pip3.6 install djangorestframework

rest api機能を実装するためにはrest api専用のアプリを既存のwebapp内に追加で作成する手続きをとる。
主要単位がmodel, シリアライザ、view,URFconfなので既存のmodel等にコードを付け加えて実装するかと思っていた。これは誤りで新たなappにいろいろ書いていく形をとる。したがって以下のようなコマンド入力が必要となる。

python3.6 manage.py startapp api

またsettings.pyのINSTALLED_APPSのリストに"rest_framework"を追加する。

 

イメージ

クライアント側とオブジェクトを格納するデータベース側という2視点が存在している。クライアント側では常にJSONという形式でデータを送り出したり、受け取ったりする。データベース側ではJSONというデータ形式では新たにインスタンスを作成することができないのでインスタンスを作成するためにデータの形を成型したり、またGETのようなデータベース内のオブジェクトを参照する場合にクライアントのためにJSON形式でデータを送り出す必要があることが想像できると思う。このデータ形式を変換する役割を担っているのがserislizerシリアライザのようだ。このシリアライザはserializers.pyに規定(ModelSerializerやListSerializerを継承)し、views.pyでこの規定したシリアライザを呼び込んで使うようだ。views.pyではViewのような動きを連想させるAPIViewなるものがある。APIViewはクラスベースのviewなのでgetやpostに合わせて挙動を設定する。getの場合はクエリセットしたオブジェクトをクライアントに提供する前にシリアライザを通してJSON化する。そしてクライアントにそれを渡す。postの場合はJSONデータを一度シリアライザを通すことでオブジェクトを作成するのに適したデータ形式に成型する。その結果をsaveメソッドを使いインスタンスを生成する流れをとる。

今困っていること

一応DRFをテスト的に実装した。GETに関してはうまく動作している。しかしながらPOSTの動作確認ができない。なぜならrequestsでJSONデータを投げないといけないがそのやり方がわからないからだ。csvからjson.dumpすればよいのか ?