9
REST APIの実際のシナリオでのPUTメソッドとPATCHメソッドの使用
まず、いくつかの定義: PUTはセクション9.6 RFC 2616で定義されています。 PUTメソッドは、囲まれたエンティティが指定されたRequest-URIの下に格納されることを要求します。Request-URIが既存のリソースを参照している場合、囲まれたエンティティは、元のサーバーにあるエンティティの変更バージョンと見なされるべきです(SHOULD)。Request-URIが既存のリソースを指さず、そのURIが要求元のユーザーエージェントによって新しいリソースとして定義できる場合、オリジンサーバーはそのURIでリソースを作成できます。 PATCHはRFC 5789で定義されています。 PATCHメソッドは、要求エンティティに記述されている一連の変更を、Request-URIで識別されるリソースに適用するように要求します。 また、RFC 2616セクション9.1.2によれば、PUTはべき等ではなく、PUTはべき等です。 次に、実際の例を見てみましょう。/usersデータを使用してPOSTを実行し、{username: 'skwee357', email: 'skwee357@domain.com'}サーバーがリソースを作成できる場合、サーバーは201とリソースの場所で応答し(仮定/users/1)、次のGET呼び出し/users/1はを返し{id: 1, username: 'skwee357', email: 'skwee357@domain.com'}ます。 次に、メールを変更したいとします。メールの変更は「一連の変更」と見なされるため/users/1、「パッチドキュメント」でパッチを適用する必要があります。私のケースでは、JSON形式のドキュメントのようになります。{email: 'skwee357@newdomain.com'}。その後、サーバーは200を返します(許可に問題がない場合)。これは私に最初の質問をもたらします: パッチはべき等ではありません。RFC 2616とRFC 5789でそう述べられています。ただし、同じPATCHリクエストを(新しいメールで)発行すると、同じリソースの状態が取得されます(メールはリクエストされた値に変更されます)。なぜPATCHはべき等ではないのですか? PATCHは比較的新しい動詞(2010年3月に導入されたRFC)であり、一連のフィールドの「パッチ」または変更の問題を解決するようになります。PATCHが導入される前は、誰もがPUTを使用してリソースを更新していました。しかし、PATCHが導入された後は、PUTが何に使用されるのか混乱します。そして、これは私に私の2番目の(そして主要な)質問をもたらします: PUTとPATCHの本当の違いは何ですか?特定のリソースの下のエンティティ全体を置き換えるために PUTが使用される可能性があることをどこかで読んだので、(PATCHのような属性のセットの代わりに)エンティティ全体を送信する必要があります。そのような場合の実際の使用法は何ですか?特定のリソースURIにあるエンティティをいつ置換または上書きしますか。また、そのような操作がエンティティの更新/パッチ適用と見なされないのはなぜですか?PUTで私が目にする唯一の実用的な使用例は、コレクションに対してPUTを発行すること、つまり/usersコレクション全体を置き換えることです。PATCHが導入された後、特定のエンティティでPUTを発行しても意味がありません。私が間違っている?
680
json
rest
http
put
http-method