2015-12-04 24 views
6

PUTリクエストは多くの結果をもたらす可能性があり、どのステータスコードがそれぞれに最適なのか不思議でした。PUTのHTTPステータスコード

は、私は新しいリソースを作成したいと言うので、私はそのような何か:

PUT http://example.com/resources/resource-1 

をまた、新しいリソースが作成されているので、私はHTTP 201になるだろう。

は、今私は、このリソースを更新したいので、私は新しい内容で、同じ要求を行います。

PUT http://example.com/resources/resource-1 

とリソースが更新されているので、私は、HTTP 200またはHTTP 204を取得します。しかし、同じ内容でもう一度このリクエストを送信すればどうなりますか?何も更新されていない場合でも、サーバーはHTTP 200またはHTTP 204を返しますか?私は、HTTP 200HTTP 204は、リクエストが正常に処理されたことを意味するだけで、データが変更されない場合でもリクエストは正常に処理されることができます。しかし、リクエストが正常に処理されたが、サーバ側で何も変更されていないことをクライアントに伝える方法はありますか?それがあれば、PUTリクエストに使用する必要がありますか? PUTが冪等である場合、(この処理中にエラーが発生しない限り)サーバー側の実際の処理に応じて異なるステータスを返す必要がありますか?

答えて

6

しかし、リクエストが正常に処理されたが、サーバー側で何も変更されていないことをクライアントに伝える方法はありますか?

はい、それはステータスコードとは異なります。

200 OKとエンティティの表現または204 No Contentを返し、何も返しません。

変更を適用しない場合は、ETagのようなヘッダーを使用します。クライアントはETagを以前の値と比較し、何も変更されていないと判断できます。

+0

リソースが201の最初のPUT要求を返したが、それ以降の要求で200または204を返した場合、偶発性(PUTに必要)に違反しないだろうか? – Ray

+1

@Rayいいえ。冪等の理由は、サーバー上の結果、またはより具体的には応答メッセージの内容ではなく、要求URLによって識別されるリソースのバイト内容に関するものです。サーバー上の結果は、同じリソースの連続したPUTで変更されません。 (例えば、リソースの状態は要求間で変化するかもしれません) "_"(httpのような) ://www.restapitutorial.com/lessons/idempotency.html)。 – CodeCaster

+0

ああ...明確化のおかげで - 完全な意味がある。 – Ray

関連する問題