檢視次數:
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)