RFC 5789の内容は次のとおりです。
PATCH メソッドは、リクエスト エンティティに記述された一連の変更が、Request-URI によって識別されるリソースに適用されることを要求します。一連の変更は、メディア タイプによって識別される「パッチ ドキュメント」と呼ばれる形式で表されます。Request-URI が既存のリソースを指していない場合、サーバーは、パッチ ドキュメントの種類 (null リソースを論理的に変更できるかどうか) やアクセス許可などに応じて、新しいリソースを作成することができます。
PUT 要求と PATCH 要求の違いは、サーバーが囲まれたエンティティを処理して、Request-URI によって識別されるリソースを変更する方法に反映されます。PUT 要求では、同封されたエンティティは、オリジン サーバーに格納されているリソースの変更されたバージョンと見なされ、クライアントは格納されているバージョンを置き換えるように要求しています。ただし、PATCH を使用すると、囲まれたエンティティには、現在オリジン サーバーに存在するリソースを変更して新しいバージョンを生成する方法を説明する一連の指示が含まれます。
私が持っているとしましょう{ "login": "x", "enabled": true }
、そして私はそれを無効にしたいと思います。
投稿によると、「お願いします。ばかのようにパッチを当てないでください。」、適切な PATCH リクエストは次のようになります
[{ "op": "replace", "path": "/enabled", "value": false }]
ただし、次のリクエストを見てみましょう。
{ "enabled": false }
また、「オリジンサーバーに現在存在するリソースを変更する方法を説明する一連の指示も含まれています」。唯一の違いは、JSON オブジェクトの代わりに JSON プロパティが使用されることです。
それほど強力ではないように見えますが、配列の変更は必要に応じて他の特別な構文 ( など{"a":{"add":[], "remove":[]}}
) を持つことができ、サーバー ロジックはいずれにせよ、より強力なものを処理できない可能性があります。
RFC による不適切な PATCH 要求ですか? もしそうなら、なぜですか?
一方、{ "op": "disable" }
正しい PATCH 要求でしょうか?