2017-04-26 2 views
0

私は、SpringブートアプリケーションとしてホストされているUI(角)を持っています。 UIはREST API(Jersey)と通信します。 メンテナンス中のアプリケーション全体またはその一部がREST:Webサイトのメンテナンスを処理します

(1)私はよく分かりませんが、今訪問した人にメンテナンスWebページを表示する方法(角張っているか、バックエンド、そしてどのように?)。

2)既にウェブサイトの一部にいるユーザーの場合、リフレッシュする必要があることを通知するにはどうすればよいですか。

3)既にウェブサイトの一部にいるユーザーの場合、更新されない場合や、メンテナンスが終了した場合、古い無効なデータを含むPOSTリクエストを送信した場合、 ?

注:ウェブサイトにはユーザー認証がありません。

3番目の例の例: UIにはデータベースからのレコードのリストが表示され、ユーザーは現在レコードの1つを変更していますが、バックエンドはメンテナンスに移行します。このユーザーは、バックエンドが再び利用可能になると、変更されたデータを送信します。しかし、このデータは現在無効です。それをどのように識別でき、おそらくそれについてユーザーに知らせることができます。

答えて

0

私は、あなたのAPIで使用されているいくつかのデータベースが更新されているか、バックアップされているか、それと似ていることを意味すると思います。その場合、APIがコマンドを処理できない場合、私は503 Service Unavailable応答コードを返し、フロントエンドにユーザーにきれいにフォーマットされた情報を表示させます。

クライアントが古いデータを送信するかどうかを判断するには、ETagまたはLast-Modifiedヘッダーを使用できます。 ETagsは基本的に現在のリソース状態のハッシュです。状態が変わるとETagも同様にハッシュします。リソースの状態を更新しようとするクライアントは、以前にフェッチされたETagハッシュをリソースの新しい状態とともにAPIに送信し、APIは他のクライアントによってリソースに適用された中間の変更があるかどうかを確認し、最新のバージョンでは動作しないというクライアントへのエラー。条件付き要求はRFC 7232で定義されています。

2番目の質問について、私はあなたが達成しようとしていることを完全にはわかりません。私はAJAXを使っていると言っています。正確に何をリフレッシュする必要がありますか?メンテナンス中に一部のリソースデータが変更されますか?そうでない場合、なぜ彼らはリフレッシュする気にする必要がありますか?フォーム入力データをリセットする必要がある場合、APIは205 Reset Content応答コードで応答することがありますが、これはAPIが要求を満たしていることを示し、クライアントに入力データをリセットするように通知します。 APIがmainainanceのためにリクエストを処理できない場合は、503 Service Unavailableエラーを返し、フロントエンドがAJAXを介してそれぞれのクライアントに情報を発行させるようにします。

+0

かなり詳細な説明をありがとう。 ええええええええええええええええええええええええええええええええええええええええええええええええええええるのは、 2番目の質問について、レコードがデータベースに追加(または削除)された場合、現在のユーザーが画面上でこれらのレコードを使用している場合は無効になり、変更後に変更されたレコードをAPIに送り返すとそれから私はそれが古いページから来て、おそらくそれを無視することを識別する必要があります。 – gaurav5430

+0

この場合、現在の状態のハッシュを生成し、応答とともにETagヘッダーとして送信します。メンテナンス中に、何らかのロジックの状態が変更された場合は、レコードを更新する試みが前提条件が満たされていないため(現在のETag値が更新しようとしているユーザーとは異なる)、無効なデータを処理していたクライアントが失敗します。メンテナンス中に状態が変更されず、ユーザーが「古い」状態を更新した場合、古いデータは更新前の状態と同じであるため、更新は成功し、したがって矛盾はありません。 –

0

1)APIはフロントエンドについて何も知ることができないので、そこにロジックを置くべきではありません。また、APIを介して通信することなく、Angularはバックエンドについて何も知ることができません。メンテナンスのためにAPIまたはSpring Bootを使用した場合、どうなりますか? Angularは、これらのサービスが利用できないときに受け取る応答を処理させない限り、それを知ることはできません。

2)Angularから、REST APIのタイムアウト時にpingを実行できます。次に、APIからの応答のステータスをチェックする関数をインデックスに追加します。メンテナンスの場合は、メンテナンスページにリダイレクトしてください。そうすれば、ネットワーク接続のオーバーヘッドが増え、APIが少し難しくなるかもしれませんが、ライブ接続には望み通りに聞こえます。それ以外の場合、ユーザーがAPIに触れる操作を行うまで待つことができれば、サービスが停止したときに戻ってくるHTTPエラーコードを処理できます。

3)どのように古いのですか?それはセキュリティ上の懸念ですか?通常送信されるデータから通知する手段がない場合は、何らかのタイムスタンプを追加することができますが、それは回避するのがかなり簡単です。それがあなたが行きたいと思えばタイムスタンプに関する多くの話題があります。

+0

メンテナンス中のAngle app + Springブートがメンテナンス中の場合、メンテナンスページを表示する担当者はフロントエンドの新しいルートである必要がありますか、またはすべてのリクエストを503にルーティングするSpringブートアプリケーションのフィルタである必要がありますか? – gaurav5430

+0

IMO影響を受けるサービスによって異なります。 Angularだけにアクセスできないインスタンスが存在する場合、Spring側はそれを処理する必要があります。 API /スプリング側だけにアクセスできない場合は、Angularが処理します。 Angularがhtmlとjsにコンパイルされているため、Angularがメンテナンスを受けるケースは想像できません。新しいファイルを5秒間の停止時間で置きます。 DBのみがメンテナンスされている場合は、Spring内に置くことができ、それが最も洗練されたソリューションになります。 – Michael

関連する問題