・リクエストにそのリソースの情報を全て乗せて送信する
・更新処理でオートインクリメントや更新日時の自動更新などが発生しない(冪等)
上記であればPUT。
・リクエストにそのリソースの情報を部分的(Nameだけなど)に送信する
・更新処理でオートインクリメントや更新日時の自動更新などが発生する(非冪等)
上記であればPATCHじゃないでしょうか。
更新のみを行うPUTは適切なのか
以下のサイトから抜粋します。
HTTP Methods [ RESTful APIs Verbs ] – REST API Tutorial
PUTのセクションで
if resource does not exist then API may decide to create a new resource or not
「該当のリソースがなければ、APIは新しいリソースを作るかもしれない(may)」
とあるので、別にCREATEしなくてもいいんじゃないでしょうか?
また、このサイトのSummaryのセクションでのPUTの説明では
200 (OK) or 204 (No Content). Use 404 (Not Found), if ID not found or invalid.
「200か204。IDが見つからないか無効な場合は404を使います」
とあるので、やはりCREATEせずに404を返してもいいのかなと思います。
UPDATE or 404 は冪等ではないのか
これは冪等であると言えるんじゃないでしょうか?
以下は僕の私見なのですが、「冪等」はクライアントに対して同じ結果を返すというものではなく、
サーバー側への影響が同じということじゃないでしょうか。
F5連打やボタン連打をされたとしても、サーバー側への副作用はないということです。
負荷はかかりますけど。
仮にこれが冪等ではないのであれば、冪等メソッドとして定義されているGETやDELETEも
冪等ではないということになります。
1回目にGETできたNAMEが「Foo」だったものが、2回目には「Bar」になっているかもしれませんし、
3回目には404かもしれません。
1回目でDELETEに成功すると、2回目のDELETEは404ですよね。
ただ、いずれの場合も何度実行されようが勝手にデータが書き換わったりはないので
冪等なんだと思います。
だから冒頭で書いた、オートインクリメントや更新日時の自動更新が発生してしまうと
送信した情報以外の情報も変わってしまってしまうので冪等ではないと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。