
t0mmy
2020年12月30日に参加
学習履歴詳細
API デザインパターン 20章 匿名書き込み 読了
やったこと
- API デザインパターン 20章 匿名書き込み 読了
学んだこと
ポイント
ポイント
- 標準の
create
メソッドと比較した、write
メソッドの特徴 write
メソッドの実装が効果的なユースケースwrite
メソッドで書きこむデータに対する、一貫性の考え方学び
write
カスタムメソッドは、一意の識別子を持たない(≒持たせることに意味のない)データを書き込むためのメソッドwrite
メソッドは、集計値にこそ価値があるデータをAPIで書き込みたい場合に有効- 個々のデータを識別したい場合は、標準の
create
メソッドを通して、リソースとして扱う
- 個々のデータを識別したい場合は、標準の
write
メソッドで一貫性を保つことに、あまり意味はない
メモ
データを特定できないような、「書き込み」に特化した処理は、そのままではリソース指向には向かない。
- ログデータなど、非常に小さな単位での書き込み処理が該当
そのため、「書き込み処理」という独自の概念を組み入れて、非リソース指向のデータを、リソース指向に適合させる。
ここでいう「匿名データ」とは、識別子を持たないデータを指す。
概要
以下の特徴を持つ、 write
カスタムメソッドを実装する。
- 匿名のまま(≒一意な識別子を持たせず)書き込み可能
- 書き込んだデータ群に対して、集計値を要求できる
- そして、個々のデータを取り出すことはできない
write
カスタムメソッドにて書き込むデータを、 リソースと区別して エントリー と呼称する。
実装
write
カスタムメソッドでは、以下のように振る舞う。
- 書き込みに成功した場合は、値を何も返さない(またはvoidを返却する)
- 書き込みに失敗した場合は、エラーを返す
URLは、以下を推奨(議論の余地あり)。
/chatRooms/1/statEntries:write
一貫性
読み込みについて、一貫性を維持することはあまり重要ではない。
- get 処理では 統計データを返すため、どのデータを追加したか知る意味が薄い
- 他の誰かが
write
メソッドを呼んでいる可能性
そのため、write
メソッドは、バックエンドの処理を待たずに、 200 OK
を返してよい。
- LRO(Long Run Operation)を返すのもNG
- 結果に時間がかかる場合は、
202 Accepted
を返すだけで十分
トレードオフ
write
メソッドは、分析用データやログデータなど、以下のような状況でのみ役立つ。
- 識別子を持たせることにあまり意味がない
- 個々のデータではなく、分析結果に価値がある
また、そもそも分析データの取り込みを、APIでサポートするべきかも、議論のポイント。
扱うこと
- 匿名データとは何か
- リソースの作成に頼らず、APIに伝田を取り込む方法
- 取り込んだデータの一貫性に関する問題にどう対処するか
まとめ
- データをシステムに取り込む必要がある場合、専用の
write
メソッドを使用する- 言い換えると、アドレス指定されない、個別のリソースを作成したりしない
write
メソッドでAPIに書き込んだデータは、後でAPIから削除できないwrite
メソッド(およびそのバッチ版)は、結果のステータスコード以外のレスポンスは返さない- 特殊な状況を除いて、LROリソースであってもリソースを返してはならない
-
write
メソッドは、リソースではなく、エントリーを扱う- エントリーは、アドレス指定できない、一時的なデータのこと
WebAPI
2023年08月11日(金)
1.0時間