2011-01-04 10 views
15

別々の種類の「見つからない」エラーを区別したいと思います。HTTPステータスコードにカスタム理由を使用して、REST APIのエラーを区別することはできますか

GET /author/Adams/works/HHGTTG

いずれかの著者が「が見つかりません」されたり、仕事が見つからbe'not可能性」と私はこの2つを区別します:たとえば、次の要求を与えられました。

状況: - : - 理由フレーズを変更することができる仕様によると

を発見していない作業404 404著者が
ステータスが見つかりません。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html

6.1.1ステータスコードと理由フレーズ

...ここに記載されている理由のフレーズのみ推奨されている - 彼らはプロトコルに影響を与えることなく、地元の同等物に置き換えることができる...

同じステータスコードに2つの固有のフレーズを使用することもできますか?

これは妥当なアプローチですか、より詳細なエラーを示すためのより良い慣習ですか?

最終的に、私はAuthorNotFoundまたはWorkNotFound例外を一般的なAuthorOrWorkNotFound例外の代わりに投げるクライアントライブラリを用意したいと思います。

答えて

4

あなたが見つからないアプローチを「影の」を使用している場合、あなたはレスポンスボディに404を使用して行うことができます:

  • は、テキスト内容(「作者が見つからない」、「が見つかりません仕事」)で404のステータスを使用。言語の柔軟性を高めるには、ラベル(error.author.notFoundなど)を使用することができます。
  • は、「サブコード」の解析がより構造化され、はるかに簡単です(10は著者が見つかりません、11ユーザーが見つかりません)。

上記のサブコードは推奨されていません。これらのサブコードは、統一されたHTTPインターフェイスに多くの複雑さとメンテナンスを追加します。 api-clientライブラリの構造を変更する。最初に/author/adams/work/11に電話をかけましょう。 404を返した場合は、次に/author/adams/を呼び出して、404の原因となった不足している著者であるかどうかを確認します。次にNotFound例外をスローすることができます。

もう1つの方法は、end api-clientアプリケーションを別の方法で設計することです。最初に/author/adamsと呼ぶべきです。そうでなければ、404は/author/adams/workに進みます。当然、アプリケーション自体がパスを下降しています。しかし、これはもちろん、フロントエンド内のページフローがこの呼び出しシーケンスに適合している場合にのみ機能します。

+0

は、これは私が私の使用のために、それはこれは私がWorkNotFoundに見つからない404を変換することが正当だ私のユースケースのために、考えるようになった – Ben

+0

[得たマングルされた以前のコメント]には見られない404を翻訳しlegimateだ、考えるようになったとしても本当の理由は、著者がないからです。私が/ author/adams /をリクエストし、常にWorkNotFoundに変換される404を取得し、404/author/adams/work/HHGTTGが404を常にWorkNotFoundに変換します。 クライアント側作者を直接探すことで、WorkNotFoundの根本原因がAuthorNotFoundかどうかを簡単に判断できます。役に立つヒントをありがとう。 – Ben

7

HTTP応答の本文に追加の情報を解析できるメッセージが含まれている可能性があります。

ステータスコード(応答内)のHTTPステータスメッセージは任意のもので、クライアントには影響しません。 HTTPクライアントは、通常、メッセージテキストを無視します。

関連する問題