質問
連携先システムではレスポンスにJSON形式を指定していますが、連携先システムがメンテナンス中の場合にHULFT SquareからAPIを呼び出すと、HTTPステータスは200で、1行目に「Status: 503 Maintenance mode」の情報が含まれたメンテナンスページのHTMLが返却されます。
正常終了時のステータス200と区別した上で、返却されたHTTPの内容からメンテナンス中か否かを判定し、自動でリトライ処理を実施することは可能ですか。
回答
一例とはなりますが、以下のようなスクリプトを実装いただくことで、接続先システムからHTMLが返却された場合でも、HTMLの内容を判定しリトライ処理を実施することが可能かと存じます。
※複雑な設定となるため、スクリプトの構造をブロックごとに分けてご紹介いたします。
■スクリプトの実装イメージ
■処理概要
【1】LOOPの繰り返し処理
※以下try-catch処理を自動で指定回数分繰り返す
[try-catchの例外監視処理]
赤線① try
・繰り返し回数が0回(初回)の場合、接続先システムにリクエストを投げる →赤線③へ
・繰り返し回数が1回以上の場合、接続先システムにリクエストを投げ、
返却されたレスポンスボディに「Status: 503 Maintenance mode」が含まれるかの判定をする →赤線③へ
赤線② catch(例外発生時の処理)
・ステータスコードが200の場合、再度先頭のLOOPに戻る
・ステータスコードが200以外の場合、予期しない動作と判断し、任意のエラーメッセージを表示して
スクリプトを異常終了する
【2】赤線③ メンテナンス中であるかの判定処理
・判定結果がtrueの場合(レスポンスボディに「Status: 503 Maintenance mode」が含まれる場合)、
メンテナンス中と判断し、任意のメッセージを表示してスクリプトを異常終了する
・判定結果がfalseの場合(レスポンスボディに「Status: 503 Maintenance mode」が含まれない場合)、
任意の後続処理を行い終了する
■設定手順
--[Start] から LOOPの繰り返し処理 の赤線①部分について--
1.「スクリプト実装イメージ」を参考に、以下コンポーネントを配置する
・[繰り返し処理]フロー
・[例外監視処理]フロー
・[条件分岐処理]フロー
・[GET実行処理]
・[変数代入処理]
・[break処理]フロー
2.[繰り返し処理]フローの繰り返し回数として、2を設定する
*無限ループ防止のため、必ず任意の回数を指定してください(例では2回リトライする設定となります)
3.[例外監視処理]フローの必須設定で、[GET実行処理]の「get」と「re_get」をチェック対象とします
4.[条件分岐処理]フローの繰り返し条件として、以下を設定する
①コンポーネント変数 LOOP:count が 0 と等しい
②コンポーネント変数 LOOP:count が 0 より大きい
*コンポーネント変数「count」は0から始まるため、初回は0を設定します
5.繰り返し回数が0回の場合のGET実行処理「get」では、レスポンス設定のデータ形式を「JSON」に設定し、
繰り返し回数が1回以上の場合のGET実行処理「re_get」では、レスポンス設定でデータ形式を
「その他のデータ形式」に設定した上で、どちらの場合も「レスポンスのステータスコードが4xx、5xxの場合エラーにする」にチェックを入れる
6.[変数代入処理]にて[含む]ロジックを配置し、判定文字列に「Status: 503 Maintenance mode」を
指定した上で、入力元「re_get」の[content]とあらかじめ用意しておいたスクリプト変数
(例では isMaintainanceMode)をマッピングする
-- LOOPの繰り返し処理 の赤線②部分について--
1.「スクリプト実装イメージ」を参考に、以下コンポーネントを配置する
・[条件分岐処理]フロー
・[continue処理]フロー
・[例外通知処理]フロー
2.[条件分岐処理]フローの繰り返し条件として、以下を設定する
①コンポーネント変数 get:status_code が 200 と等しい
②コンポーネント変数 get:status_code が 200 と等しくない
3.ステータスコードが200以外の場合は、[例外通知処理]フローの必須設定で任意のメッセージを設定する
メッセージの例:[GET実行]に失敗しました。実行ログを確認してください。
--赤線③ メンテナンス中であるかの判定処理 の部分 について--
1.「スクリプト実装イメージ」を参考に、以下コンポーネントを配置する
・[条件分岐処理]フロー
・[例外通知処理]フロー
・[グループ処理]
2.[条件分岐処理]フローの繰り返し条件として、以下を設定する
①スクリプト変数 isMaintainanceMode が true と等しい
②スクリプト変数 isMaintainanceMode が false と等しい
3.trueの場合は、[例外通知処理]フローの必須設定で任意のメッセージを設定する
メッセージの例:ただいまメンテナンス中です。
4.falseの場合は、任意で後続の処理を指定する
※スクリプト実装イメージのように、グループ処理を活用し、任意の後続処理をグループ化することで全体像が見やすくなります
(例ではグループの中にデータログ出力処理を配置しています)
■注意事項
無限ループ、または長時間ループするような処理を行った場合、システム全体に負荷がかかり、サービスに影響を及ぼす場合がございます。
そのため、実装にあたっては、[繰り返し処理]フローで繰り返し回数を指定いただき、「所定の回数のみループする」形式で設定いただきますようお願いいたします。
なお、本件は以下FAQでもご案内しておりますので、併せてご確認ください。
◇ご利用にあたって禁止・制限いただきたい操作について
コメント
0件のコメント
記事コメントは受け付けていません。