小村のポートフォリオサイト開発(13) DjangoRestFramework レスポンスデータフォーマット
こんばんは、小村だよ!
下記のポートフォリオサイトを構築していくよ
- サイト:Little Village
前回記事の論理削除対応をしたね
今回はAPIのレスポンスのフォーマットを決めていきたいと思います
目次
- APIのレスポンスのフォーマットを決める
- 記事取込処理の正常系レスポンスを決める
- 全体共通のエラー時のレスポンスを決める
記録
APIのレスポンスのフォーマットを決める
参考:Udemy REST WebAPI サービス 設計 26. データの内部構造
参考:WebAPIでエラーをどう表現すべき?15のサービスを調査してみた」についてまとめた
- APIのレスポンスは、業務上では下記のようなフォーマットで返してました
{ result: 1 or 0 data: { ... } }
改めて今回調べたところ、resultなどは返さないのが一般的のようですね?
何が一番いいのか色々見ましたが最終的にUdemyで上記講座に書かれていた方針でいきます
{ code: xx detail: '' }
記事取込処理の正常系レスポンスを決める
ではでは、今回の記事取込処理のレスポンスを決めていきましょう
まず、正常に処理が行われたときは下記を返すようにしましょうか
http_status: 200 { created_count: x, updated_count: x, deleted_count: x, failed_count: x, failed_ids: [x, x, x] }
正常かどうかはレスポンスヘッダで確認します。
HTTP 200 OK はリクエストが成功した場合に返すレスポンスコードですね
それから作成、更新、削除件数を返します。
最後に入力チェックではじかれた件数とIDを返すようにしましょうか
そんな感じにViewsを修正します
修正して実行した結果が最後の図。問題なさそうですね!
全体共通のエラー時のレスポンスを決める
エラーが発生した際の処理も決めたいと思います
上記を参考にException Handlerをカスタマイズしたいと思います
- 参考サイトを参考に、
utiles.handler.py
を作成して図のように記載
これをsettingsに上記画像のように書くのだけど、そこで2時間くらいエラーと戦いました。
結果として、上記の書き方です。
- エラーで詰まったら飯食うの大事。一瞬で解けた。フォルダパスの書き方が原因だった
実装してエラー吐いた結果がこれ
本当は出力を
message
にしたかったのにdetail
で出てしまうのは自分の実力不足でする……業務の方のシステムだとdetailなんて吐いてないので、実装覗いてきて改良します
おわりに
やっとこさ取込機能に関する機能の実装は一通りおしまい!
あとはリファクタリングしたらweb側の実装に戻れます!
あともうちょいだ!がんばろー!
ではでは、ちゃお~~~!