Server & Workload Protection のパフォーマンスを低下させる可能性のあるAPI呼び出し数の急増を防ぐために、APIレート制限は/apiエンドポイントに設定されます。
APIコール率は、 Server & Workload Protection が過去60秒間に受信したAPIコールの数として測定されます。レート制限を超えると、Managerはコールレートがすべてのレート制限を下回るまで要求を処理しません。
呼び出しが行われ、APIレート制限を超えた場合の対応コードは
429
メッセージ付きToo many API requests
。コード内のレート制限エラーを処理する
環境でAPIレート制限を超えたときにSDKのメソッドまたは関数が実行されると、メソッドまたは関数は
ApiException
メッセージ付きToo many API calls
。このメッセージの例外をテストし、検出された場合は一定時間待機してからスクリプトを再度実行するロジックをコードに含めることを検討してください。レート制限を継続的に超過する場合は、サポートに問い合わせる。
ヒントレート制限を超えている間に行われた呼び出しは、APIレート測定にカウントされません。
|
次を使用できます。
APIUsageAPI
コールレートを決定するためのSDKのクラス。 (「API Usage in the API Reference..) For example you can search for all API calls that occur during
a certain time period. Parse the returned data to count the total calls. You can also
find the number of code 429 responses. (See 期間検索.)次の例では、APIレート制限を超えたときに発生する例外またはエラーをキャッチします。検出されると、指数バックオフアルゴリズムによって、コールが再試行されるまでの遅延が計算されます。再試行の回数は最大数に制限されています。
while True: # Create a computer object and set the policy ID computer = api.Computer() computer.policy_id = policy_id try: # Modify the computer on Server & Workload Protection and store the ID of the returned computer computer = computers_api.modify_computer(computer_ids[change_count], computer, api_version, overrides=False) modified_computer_ids.append(computer.id) retries = 0 # Increment the count and return if all computers are modified change_count += 1 if change_count == len(computer_ids): return modified_computer_ids except api_exception as e: if e.status == 429 and retries < MAX_RETRIES: # The error is due to exceeding an API rate limit retries += 1 # Calculate sleep time exp_backoff = (2 ** (retries +3)) / 1000 print("API rate limit is exceeded. Retry in {} s.".format(exp_backoff)) time.sleep(exp_backoff) else: # Return all other exception causes or when max retries is exceeded return "Exception: " + str(e)Server & Workload Protection and store the ID of the returned computer computer = computers_api.modify_computer(computer_ids[change_count], computer, api_version, overrides=False) modified_computer_ids.append(computer.id) retries = 0 # Increment the count and return if all computers are modified change_count += 1 if change_count == len(computer_ids): return modified_computer_ids except api_exception as e: if e.status == 429 and retries < MAX_RETRIES: # The error is due to exceeding an API rate limit retries += 1 # Calculate sleep time exp_backoff = (2 ** (retries +3)) / 1000 print("API rate limit is exceeded. Retry in {} s.".format(exp_backoff)) time.sleep(exp_backoff) else: # Return all other exception causes or when max retries is exceeded return "Exception: " + str(e)