web-dev-qa-db-ja.com

REST-作成しないでください=作成およびPOST =更新

[〜#〜] put [〜#〜]を使用してCreateおよび[〜#〜] post [〜#〜]を使用しないでくださいPUTはべき等であるためUpdateに。

そのように、同じ注文の複数のPUTは1つの注文のみを発行しますか?

30
Tawani

違いは、PUTが既知のリソース用であり、そのため更新に使用されることです。rfc2616では ここに記載 です。

POSTとPUTリクエストの根本的な違いは、Request-URIの異なる意味に反映されています。POSTリクエストのURIは、そのリソースは、データ受け入れプロセス、他のプロトコルへのゲートウェイ、または注釈を受け入れる別のエンティティである可能性があります。これに対して、PUTリクエストのURIは、リクエストで囲まれたエンティティを識別します。エージェントはどのURIが意図されているかを知っており、サーバーはリクエストを他のリソースに適用しようとしてはなりません。

ただし、名前そのものに基づいて、あなたがどこから来ているのかわかります。

私は通常、POSTを見てください。これは、リクエストのコンテンツ(ほとんどの場合、フォーム値としてのパラメーター)を処理するURIである必要があるため)私のリクエストの対象(/ users/1234)は、既に存在するリソースです。

私は命名法が長い道のりを遡ると信じています、初期のウェブを考慮してください。メッセージボードにPOSTメッセージを送信し、後日、メッセージにPUT追加コンテンツを追加したい場合があります。

53
JP Silvashy

HTTPメソッドとCRUDの間には厳密な対応関係はありません。これは一部のフレームワークで採用されている規則ですが、REST=制約とは関係ありません。

PUT要求は、現在のコンテンツを完全に無視して、指定されたURIにあるものをすべて囲まれた表現で置き換えるようにサーバーに要求します。良い例えは、シェルのmvコマンドです。宛先に新しいファイルが存在しない場合は作成され、存在するものはすべて置き換えられます。いずれの場合も、そこにあるものはすべて無視されます。これを使用して、完全な表現を送信している限り、何かを作成するだけでなく、何かを更新することもできます。

POSTは、事前定義されたルールに従ってペイロードを処理するようにターゲットリソースに要求するため、HTTPプロトコルでまだ標準化されていない操作に使用するメソッドです。つまり、POSTは、他のメソッドの機能を複製しない限り、たとえば[POSTを使用する必要があるときに取得するためにGETを使用している限り] -そして、あなたはそれを適切に文書化します。

したがって、正確な状況に応じて、作成と更新の両方に使用できますが、PUTでは、APIのすべてに対して一貫したセマンティクスが必要であり、部分的な更新はできません。また、POST正確に機能する方法を文書化する限り、何でもできます。

7
Pedro Werneck

PUTは、新しいリソースのURIがクライアントに既知である場合にのみ、作成に使用する必要があります。新しいURIは、リソース表現でサービスによって通知される場合があります。たとえば、サービスは何らかの送信フォームを提供し、新しいリソースの事前に設定されたURIである可能性のあるアクションURIを指定できます。この場合、はい、最初のPUT要求がリソースを正常に作成した場合、PUT要求に続いてリソースが置き換えられるだけです。

更新にPOST=を使用しても構いません。POSTは「作成」操作専用です。

6
ioseb

依存します。両方でサイト/レコードを作成/更新できます。クライアントがURIを指定している場合、PUTがその方法です。例えばDreamweaver、PUTなどのコードエディターは、使用に適したプロトコルです。

このスレッドもご覧ください: put vs post in rest

0
micho