
- 作者: 水野貴明
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/11/21
- メディア: 大型本
- この商品を含むブログ (9件) を見る
読んだ
モチベーション
- ここしばらく API を開発していたけれど,ずっと勘と経験を頼りにやっていてちょっと整理したかった
- そのために補助線として本があると便利そうという感じ
読書メモ
1章
- 第1章の最後に LSUDs (large set of unknown developers)` と `SSKDs (small set of known developers)` という概念に触れられていた
- 今回私は SSKDs を対象とした API の開発者/設計者という視点で読んでた.
2章: エンドポイント設計とリクエストの形式
3章: レスポンスデータの設計
エンベロープなしの例
{ "friends": [100, 101, 102] }
エンベロープありの例
{ "results": { "friends": [100, 101, 102] } }
- 著者はエラーやメタ情報は HTTP のに寄せるべきという立場
- ステータスコードなら HTTP のステータスを使えばいいしメタ情報は HTTP ヘッダに入れれば良い
- 僕は違う考えがあって,現代のアプリケーションで発生するエラーは多様性にあふれており,HTTP のエラーコードでは表現力が足りないと思っている
- 過去には HTTP Status は 500 にしつつカスタムヘッダとアプリケーションレスポンスにアプリケーションのエラーコードを含めるという実装をしました
- ヘッダだと HTTP サーバのログフォーマットへ出力を追加しやすい
- あと HTTP としては完全に成功していて,アプリケーション起因の問題のケースで 200 を返しつつボディのエラーを付与するという実装が入ったことがある
- これはちょっと失敗だったかもしれない...
- どうしても warning 的なレスポンスを表現したく,しかしエラーとして監視/カウントしたくないタイプのエラー(Expected but Unacceptedな奴.例えば会議室の予約システムで予約しようとした時間にすでに予定があるとか)ではあった
- 4xx系のエラーステータス使えば? みたいな話はあるけど、「えっこれ別にエージェントが悪いわけじゃないですよね」みたいなモゴモゴした気持ちになる、上の例だと既に予定があるかどうか厳密には登録するまでわからないわけですし……
- これはちょっと失敗だったかもしれない...
- アプリケーション固有のエラーコードがあると,エージェントにより適切な情報を伝えられるので,その先にいるユーザやシステムが適切にハンドルできるようになる
- と言っても全てのエラーにエラーコード降るのはコストがかかるのもあり,汎用エラーみたいなのは多用してしまったが...
- 過去には HTTP Status は 500 にしつつカスタムヘッダとアプリケーションレスポンスにアプリケーションのエラーコードを含めるという実装をしました
- 実際の例でいうとParse.comのレスポンスはエンベロープを採用していて、結構便利だったので採用したみたいなところがあります
4章: HTTPの使用を最大限利用する
5章: 設計変更をしやすい Web API を作る
- むずいよねえ
- オーケストレーション層を作って吸収する話は良かった,規模が大きくなってくるとそう言った動きも重要そう
- 僕自身の経験を振り返ると以下の取り組みがあった