PATCHメソッドは、応答本文でリソースのすべてのフィールドを返す必要がありますか?
それとも、更新されたフィールドのみを返す必要がありますか?
私は読んでいます this
たとえば、更新されたフィールドのみを返す場合、ユーザーは一部のフィールドを更新しながら、サーバーで更新されたフィールドを知ることができます。
**Users resource representations**
name: string
age: number
createdon: date
modifiedon: date
PATCH /users/{userId}
Request body
{
name: 'changedname',
}
Response body Case1
{
name: 'changedname',
age: 20,
createdon: 2016-01-01,
modifiedon: 2016-06-09
}
Response body Case2
{
name: 'changedname',
modifiedon: 2016-06-09
}
通常、これは コンテンツネゴシエーション によって処理されます。言い換えれば、クライアントは、特定の表現が必要な場合にそれを要求します。リクエストは次のようになります。
PATCH /user/123
Content-Type: application/merge-patch+json
Accept: application/vnd.company.user+json
...
この場合、クライアントは完全なuser
表現が回答として必要であることを表明します。またはそれは行うことができます:
PATCH /user/123
Content-Type: application/merge-patch+json
Accept: application/vnd.company.object-fragment+json
...
あるオブジェクトの一般的なフラグメント表現を要求します。
必要がない場合は両方を実装する必要はありません。その場合は、ユースケースを実行し、406 Not Acceptable
からmedia-types
で応答するだけで、現時点ではサポートされません。
PATCHの仕様はこれを義務付けていません。
これを制御したい場合は、インスピレーションを得るために https://greenbytes.de/tech/webdav/rfc7240.html#return を確認することをお勧めします。
REST仕様(これについては RFC 6902 を参照する必要があると思います)は、これに関する強力なルールを適用するとは思わないクライアントが必要な方法でリソースを使用できるように、リソース全体を返します。理論的には、クライアント自体がパッチされたもの(少なくとも要求が何であったか)を知っています。サーバーからの確認が得られない可能性があります些細なこと(特にPATCHがコレクションに使用されることを考えると特に)、または少なくとも価値がない。