2017-12-07 15 views
0

私はアプリケーションがあります。バックエンドはSpring MVCで、フロントエンドは角度です。サーバー側からクライアント側にデータが送信されます。私の質問は、サーバー側で何か問題が発生した場合、それを処理する最善の方法です。 私は約2解決策だと思う: 最初のものは、このような3つの属性例外の場合のHttpリクエストの処理

public class Response{ boolean hasError; Object data; Exception ex}

を含む新しいモデルを作成し、hasErrorが偽等しい場合、クライアント側のチェックでは、クライアント側にこのオブジェクトを送信することですそれ以外の場合は例外オブジェクトをチェックします。 すべての場合において、http応答ステータスがサーバ側から200

となり、2番目の解決策は、http応答のカスタムステータスコードを作成し、このステータスコードを使用して例外タイプを検出することです。

これら2つのソリューションのベストプラクティスは何ですか? これらの2つのソリューションよりも優れたソリューションがありますか?

答えて

1

TL; DR:

あなたが持っているものを春に使用し、それをREST原則で実行します。 フロントエンドのエラーをより一般的なメッセージで処理して、エラー処理の際にカスタムモデルを必要とせず、httpステータスコードだけを処理します。

長いバージョン:

車輪の再発明し、カスタムのHTTPコードを記述する必要はありません。周囲にはたくさんのものがあり、Springは@ControllerAdvice@ExceptionHanlder注釈で例外を処理する優れたサポートを持っています。 Some referenceおよびquick guide

バックエンドのエンドポイントによっては、必要なものに最適なさまざまな例外クラスを記述できます。ここでRESTの原則に従おうとすると、後で自分自身に感謝するでしょう。 また、エラーをフロントエンドまで伝播する必要はありません。たとえば、NullPointerExceptionがバックエンドで発生した場合、を表示しないヌルポインタがフロントエンドでユーザにとなった場合、これは何も役に立ちません。

すべての場合にはHTTP応答ステータスがエラーが発生した場合には、発信者に混乱であるため、サーバ側

から200は、200を返さないだろう、このソリューションの助成金。エラーが発生した場合は、エラーに対応する4xxまたは5xxコードを返し、バックエンドとは独立してフロントエンドでそのケースを処理します(データベースがダウンした場合、エラー500がフロントエンドに返され、 サービスが一時的にダウンしたようなメッセージが表示されました。後でもう一度試してください。など)。

1

マイクロサービスベースのアーキテクチャを使用している場合は、Netflix hystrixフォールトトレランスライブラリを試してみてください。サーキットブレーカパターンを使用し、関連サービスに障害が発生したときにマイクロサービスを動作させることができます。

+0

サーキットブレーカのデザインパターンとNetflix hystrixのフォールトトレランスlibについては、どのようなリファレンスが最適ですか? –

+0

スプリングガイドはいいスタートです。 https://spring.io/guides/gs/circuit-breaker/ –