2009-07-06 8 views
2

私はREST APIを開発中です。私の質問を単純化するために、私は人々が新しいblogpostを作成することを可能にするAPIを持っています。REST - 部分的に無効なリクエストが送信されたときにスローするエラー

ブログポストはカテゴリに存在し、カテゴリはカテゴリIDで指定できます。ユーザーが存在しないcategory-idを提供する場合、どのHTTPエラーコードが最も適切ですか?

404が見つかりませんでしたので、今は400バッドリクエストに行っています。良いものはありますか?

+1

あなたのAPIがブログのためのものであれば、MetaWebLog API(http://www.xmlrpc.com/metaWeblogApi)やAtom Publishing Protocol(http: //tools.ietf.org/html/rfc5023)、すべての通常のブログツールを投稿できます。 –

+0

私は自分自身もAtomと一緒に行きますが、私のサービスは実際にブログには結びついていません。私はちょうど良い例を作ったと思った – Evert

+0

あなたのURLが 'domain.com/category-name-or-id/posts'と' category-name-or-id'のようなものでなければ、悪い要求です404. –

答えて

8

ブログの投稿リソースでPUTまたはPOSTリクエストに応答しているとします。

URIを使ってアクセスしているリソースが見つかったので、私は400と一緒に行きます。ブログの投稿は、リクエストの内容が正しい場合に変更されている可能性があります。

これは送信されたクエリの内容であり、リソースの実際のURIではないので、私は400エラーに固執します。

ただし、カテゴリにPUTまたはPOSTすることでカテゴリにブログ投稿を追加すると、404が見つかりません。

0

私は404 Not Foundが最も適切なレスポンスであると考えます。クライアントが存在しないカテゴリにアクセスしようとしたと考えて、完璧な答えは「私はそのカテゴリを見つけることができません」と考えます。

0

404は、非常に具体的かつ一般的に使用されている意味を持ちます。これは、URLが見つからなかったためです。さらに、一部のブラウザでは、独自の404エラーページを使用し、より多くのことを混乱させます。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

は私が推薦するページの「許容できない406の要求によって識別されるリソースが要求で送信される受入れヘッダーに応じて、受け入れられないコンテンツ特性を持つ応答エンティティを生成することができるだけである

。」

400でも悪くはありません。

+2

406はAccept- *:ヘッダの使用に直接結びついています。 – Evert

1

409 Conflictについては、アプリケーション固有のルール違反ですか?この場合、ブログ投稿のカテゴリIDは既に存在していなければなりません。 409競合を返すと、ユーザーはPOST/PUTを再試行できるように状況を訂正するために何ができるかを特定します。

2

私はVincentに同意します。利用可能な定義済みステータスコードのうち、400が最高です。クライアントは、カテゴリIDが要求を送信する時点で有効かどうかを知っている必要があり、したがって、サーバーに不正な要求コンテンツを提供しています。 - リソースは、あなたが実際に発見された要求を送っているので、これは、使用する正しい状態ではありません - それはだった

  • 404が見つかりませんでした:提供される他の回答の一部に関しては

    提供されたリソース内で参照されていないリソースが見つかりませんでした。

  • 406このステータスは、Evertコメントと同様に、Acceptヘッダーとともに使用されます。 10.4節を参照してください。要求によって識別されるリソースは、要求で送信された受諾ヘッダに従って というコンテンツ特性が許容されない応答エンティティ を生成することしかできません。

  • 409コンフリクト - この状態は、通常は別のチャネルまたはスレッドによってリソースが変更されたために、リソースの状態が競合することを意図しています。

    ...バージョンが使用されていたとエンティティが リソースへの変更を含んで置かれている場合、以前 によって作られたものと競合(サードパーティ)要求:RFC(セクション10.4.10)に例を示し、サーバは409応答 を使用する場合があります、それは

要求を完了できないことを示すために、HTTPは400に代替手段を提供しない - フィッティング場合、あなたはこのような状況のために、独自の4XX状態を作成することができます。 RFCの6.1.1節で:

HTTPステータスコードは拡張可能です。 HTTPアプリケーションは、登録されたすべてのステータスコードの意味を理解する必要はありませんが、そのような理解は明らかに望ましいものです。

したがって、独自のカスタム "430 - リファレンスリソースが見つかりません"または同様のものを定義することができます。 HTTP準拠のクライアントは、この状態が不明な場合は400として扱いますが、クライアントがAPIに特別にコーディングされている場合は、クライアントを430として処理し、適切に処理する必要があります。

関連する問題