付録I.2 リトライ処理のコード例
リトライ処理のコード例
API(function_xxx)の実行に失敗した場合に、返却されるステータスコードやエラーオブジェクトのエラーメッセージがリトライ条件に該当するかどうかを判定します。このサンプルコードでは、HTTPステータスコードに503(Service unavailable)が返るときと、エラーオブジェクトのメッセージIDでリトライを判断する条件のときに、リトライするよう記載しています。リトライ条件に合致した場合は、指定したリトライ上限回数や間隔でAPIをリトライします。
retry_error_list = ["KART30095-E", "KART30096-E", "KART30003-E", "KART30090-E", ...] retry_count = 1 from requests.structures import CaseInsensitiveDict while True: url = block_storage_api.function_xxx() r = requests.post(url, headers=headers, auth=USER_CREDENTIAL, verify=False) if r.status_code == http.client.OK or r.status_code == http.client.ACCEPTED: # Succeeded # print("Succeeded") break else: # failed # error_code = CaseInsensitiveDict(r.json())["messageId"] if r.status_code == http.client.SERVICE_UNAVAILABLE or error_code in retry_error_list: if retry_count > MAX_RETRY_COUNT: raise Exception("Timeout Error! " "Operation was not completed.") print("Retry API") time.sleep(WAIT_TIME) retry_count += 1 else: raise requests.HTTPError(r)
- # Succeeded #
-
APIの実行に成功した場合の処理です。
このコード例では、ステータスコードが200(http.client.OK)と202(http.client.ACCEPTED)の両方を定義しています。処理を実装する際には、APIの処理方式(同期処理と非同期処理)に合わせて定義してください。
- # failed #
-
APIの実行に失敗した場合に、リトライを行う処理です。
ステータスコードが503(http.client.SERVICE_UNAVAILABLE)、またはエラーメッセージがretry_error_listに定義したメッセージIDに合致した場合、指定したリトライ上限回数(MAX_RETRY_COUNT)や間隔(WAIT_TIME)でAPIをリトライします。リトライ上限回数や間隔は、ご利用のシステム設計や運用に合わせて適切に設定してください。