[〜#〜] rest [〜#〜]サービスでクライアントに応答を返す可能性の中で、同等に見える2つの可能性を見てきました。WebApplicationException
をスローする(おそらくResponse
instance)またはResponse
インスタンスを返します。
結果が同じであるのに、なぜ一方の可能性を他方よりも使用するのですか?これは、例外と通常の応答の間で異なる反応をするように構成されている可能性のある、使用されている[〜#〜] rest [〜#〜]フレームワークに関連していますか?
結果が同じであるのに、なぜ一方の可能性を他方よりも使用するのですか?
(Java)プログラマーとして、アプリケーションの特定のルールが破られたときに例外をスローすることに慣れているからかもしれません。いくつかの文字列を数値に変換すると、NumberFormatException
を取得し、配列で間違ったインデックスを使用すると、ArrayIndexOutOfBoundsException
を取得し、許可されていないものにアクセスしてSecurityException
など。「通常の応答」を作成できない場合(間違った入力または何らかの処理エラーによる場合)に例外をスローすることに慣れています。
通常の応答を返すことができない場合は、クライアントにエラー応答を返す必要があります。これは、例外をスローするか、手動で応答を作成することで実行できます。これはクライアントにとっても同じことですが、サーバー側のコードにとっても同じではありません。
例外をスローすると、コードがよりクリーンになり、推論しやすくなり、理解しやすくなります。 WebApplicationException
をサブクラス化し、そこから独自の意味のある例外を作成するという考え方です(たとえば、_ProductNotFoundException extends WebApplicationException { ... }
_、_AccessDeniedException extends WebApplicationException { ... }
_、または例外を 例外マッパー )。
次に、throw new ProductNotFoundException()
またはthrow new AccessDeniedException()
をよりクリーンにし、 Response
を構築する代わりにフレームワークに処理させます。 =毎回、後でそれを構築するために使用された詳細に従って、コードのそのセクションで何が起こっているかを理解します。