2

私は現在、RESTful API を実装しています (深刻なことではなく、楽しみのために開発しているブログ エンジン用です)。HTTP ステータスの互換性についていくつか質問があります。

新しいブログ投稿を作成するには、POST 要求を実行する必要があります。すべてがうまくいけば、投稿が作成され、要求に対応する形式で返されます。

ウィキペディアのこのページ200 OKで、そのステータスについて読みました

POST リクエストでは、アクションの結果を記述または含むエンティティが応答に含まれます。

わかった。しかし、201 Createdステータスがあります:

要求が満たされ、新しいリソースが作成されました。

私の質問は、POST リクエストが成功し、新しいブログ投稿が作成されたときに、これら 2 つの http ステータス コードを送り返すか、一度に 1 つだけが許可されるかということです。

この情報はRFCから入手できませんでした。完全には読んでいないと思いました。

一度に許可される HTTP ステータスは 1 つだけだと思いますが、どのステータスを使用すればよいですか?

編集(新しい質問): アクションが既存のブログ投稿の編集である場合はどうなりますか? URI に PUT 要求がありますが、今回は返送200 OKしてからLocation:ヘッダーも送信する必要がありますか? この場所は PUT リクエストの URI とまったく同じになるため、GET リクエストである必要があることを除いて、それでよろしいですか?

4

2 に答える 2

6

2xx ステータスはすべて成功です。ただし、リソースを作成するための POST の場合は、リソースの場所と共に 201 を返す必要があります。仕様から:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.2

要求が満たされ、新しいリソースが作成されました。新しく作成されたリソースは、応答のエンティティで返された URI によって参照できます。リソースの最も具体的な URI は Location ヘッダー フィールドによって指定されます。応答には、ユーザーまたはユーザー エージェントが最も適切なものを選択できる、リソースの特性と場所のリストを含むエンティティを含める必要があります。エンティティ形式は、Content-Type ヘッダー フィールドで指定されたメディア タイプによって指定されます。オリジン サーバーは、201 ステータス コードを返す前にリソースを作成する必要があります。アクションをすぐに実行できない場合、サーバーは代わりに 202 (Accepted) 応答で応答する必要があります。

つまり、以下を返す必要があります。

201 Created
Location: http://www.example.com/path/to/resource

ブラウザは、それが参照するリソースであり、同時にリクエストが成功したことを認識します。マルチステータスについて心配する必要はありません。

于 2009-09-05T21:37:20.090 に答える
1

[この回答は元の質問者にとっては少し遅いと思いますが、将来この質問に出くわす可能性のある他の人は興味があるかもしれません]

アルブルーが言ったことに加えて:

つまり、以下を返す必要があります。

201 Created
Location: http://www.example.com/path/to/resource

Content-Locationヘッダーも設定する限り、新しく作成されたエンティティを返すこともできます。

POST /make-new-resource

それから

HTTP/1.1 201 Created
Location: http://www.example.com/path/to/resource
Content-Location: http://www.example.com/path/to/resource

[representation of new resource]

ヘッダーを含めない場合Content-Location、応答本文は、新しく作成されたリソースの (単一の表現ではなく) リソース表現のハイパーテキスト リストとして解釈されます。

于 2012-11-16T14:26:48.717 に答える