2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DRFチュートリアルを終えてみて

Posted at

はじめに

チュートリアル各章についてのまとめはこちら

DRFチュートリアル要旨1

DRFチュートリアル要旨2

DRFチュートリアル要旨3

DRFチュートリアル要旨4

DRFチュートリアル要旨5

DRFチュートリアル要旨6

ここではこれらを踏まえて簡単に思うところをまとめてみました。

チュートリアル終了時点の作業結果は以下のリンクです。
GitHub

DRFをなぜ学習したのか

Reactのチュートリアルを終えてReact+Djangoで少し自分にとっては挑戦的なToDoアプリを作ろうと思い、そうなるとフロントとバックエンドでやり取りをするということはJSONを扱ったり、
そもそも非同期でやりとりをしたくなるだろうと思ったことと、ToDoアプリという仕様上、CRUDが処理の大半になるはずなので、それであるならこれを気にDRFを使ってみようと思ったから。

DRFで楽になること・やれること

  • シリアライズとデシリアライズ(フロントとバックエンドとでデータをやり取りする際に相互にデータ形式を変換する仕組み)の実装
  • リクエストの識別、及びメソッドハンドラ(こちらからrequest.POSTなどと定義しなくても、request.dataと定義すればフレームワークがリクエストを識別し、どのHTTPリクエストメソッドを使うか判断する)
  • レスポンスハンドラ(リクエストに応じて、フレームワークがデータをjsonで返すかHTMLフォーマットしたものを返すのかなどレスポンスを判断して適切なものを実行してくれる)
  • HTTP status codesの明示化
  • ブラウザでのAPI挙動の確認(デフォルトはHTMLフォーマット済みで表示) → 明示的にデータ形式を参照する場合は例えばhttp://localhost/snippets.jsonなどと叩くとJSON形式でデータを表示することが可能
  • エンティティへのPermissionの作成(例えばToDoは作成したユーザーしか編集削除はできないが、閲覧は全ユーザーができるなど)
  • APIルートエンドポイントの作成
  • エンティティー間のリレーションの表現の定義(ハイパーリンクされたAPIなど)
  • 上記までの項目を簡略化し、ルーティングまでほぼ自動で行ってくれるViewSets

完走してみて

学習コストはそこそこ高いと思います。
APIについての理解があるかどうかというのはもちろん、日本語の情報も少なく、それを抜きにしてもDjango特有の抽象化がより強い印象を受ける(特に6章)ので、
自分で公式のドキュメントを適宜参照していかないと理解は難しいと感じました。
かくいう私もまだ半分理解できているかどうかで、あとはとりあえず使いながらより深めていくという感じですね……

使う場合の懸念点

  • ソーシャルログイン及びTwitterとの連携機能を使うような機能を実装するのでそれに使うdjango-allauthライブラリとの相性問題(普通に使うのにもやや癖があるので)
  • APIの理解の不足(API=外部から呼び出せる機能の塊くらいの理解はある、だからTwitterのTLやGoogleMapの地図をサイトに埋め込むことができるわけなので)
  • CRUD以外のアクションを少々実装する予定なのでそれがうまく定義できるか。

参考

DRF公式
Django REST Frameworkのチュートリアルをやってみた
Django REST frameworkで学んだことをまとめてみた

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?