API 速率限制設置在 /api 端點上,以防止大量 API 調用激增,這可能會降低 Server & Workload Security保護 性能。
API 呼叫速率是指 Server & Workload Security保護 在過去六十秒內接收到的 API 呼叫數量。當超過速率限制時,管理員將不會處理請求,直到呼叫速率低於所有速率限制。
當進行呼叫且超過 API 速率限制時,回應代碼為
429
,並顯示訊息 Too many API requests
。在您的程式碼中處理速率限制錯誤
當 SDK 方法或函數在您的環境中執行時超過 API 速率限制,該方法或函數會拋出一個
ApiException
,並帶有訊息 Too many API calls
。請考慮在您的代碼中包含邏輯來測試此訊息的異常,如果捕獲到,則在等待一段時間後再次執行腳本。如果您持續超過速率限制,聯絡技術支援中心。
秘訣當超過速率限制時進行的呼叫不會計入 API 速率測量中。
|
您可以使用 SDK 的
APIUsageAPI
類來確定調用速率。(請參閱 API 參考中的 API 使用情況。)例如,您可以搜索在特定時間範圍內發生的所有 API 調用。解析返回的資料防護以計算總調用次數。您還可以找到代碼 429 響應的數量。(請參閱 日期範圍搜索。)以下範例會捕捉當 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 Security保護 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)