Phản hồi lỗi

Phản hồi lỗi chuẩn

Nếu yêu cầu API Trình quản lý thẻ thành công, API sẽ trả về một mã trạng thái HTTP 200 cùng với dữ liệu được yêu cầu trong phần nội dung của phản hồi.

Nếu xảy ra lỗi với một yêu cầu, API sẽ trả về một mã trạng thái HTTP và lý do trong phản hồi dựa trên loại lỗi. Ngoài ra, phần nội dung của phản hồi còn chứa nội dung mô tả chi tiết về nguyên nhân gây ra lỗi. Dưới đây là ví dụ về phản hồi lỗi:

400 invalidParameter

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "accessNotConfigured",
    "message": "Access Not Configured. Please use Google Developers Console to activate the API for your project.",
   }
  ],
  "code": 403,
  "message": "Access Not Configured. Please use Google Developers Console to activate the API for your project."
 }
}

Lưu ý: Nội dung mô tả có thể thay đổi bất cứ lúc nào, vì vậy, ứng dụng không nên phụ thuộc vào văn bản mô tả thực tế.

Triển khai thuật toán thời gian đợi luỹ thừa

Thời gian đợi luỹ thừa là quá trình ứng dụng định kỳ thử lại một yêu cầu không thành công trong khoảng thời gian tăng dần. Đây là một chiến lược xử lý lỗi tiêu chuẩn cho ứng dụng mạng. API Trình quản lý thẻ được thiết kế với kỳ vọng rằng các khách hàng chọn thử lại các yêu cầu không thành công sẽ thực hiện bằng cách sử dụng thời gian đợi luỹ thừa. Ngoài việc là "bắt buộc", việc sử dụng thuật toán thời gian đợi luỹ thừa giúp tăng hiệu quả sử dụng băng thông, giảm số lượng yêu cầu cần thiết để nhận được phản hồi thành công và tối đa hoá công suất yêu cầu trong các môi trường đồng thời.

Quy trình triển khai thời gian đợi luỹ thừa đơn giản như sau.

  1. Tạo một yêu cầu đối với API.
  2. Nhận được phản hồi lỗi có mã lỗi mà bạn có thể thử lại.
  3. Chờ 1 giây + random_number_milliseconds giây.
  4. Thử yêu cầu lại.
  5. Nhận được phản hồi lỗi có mã lỗi mà bạn có thể thử lại.
  6. Chờ 2 giây + random_number_milliseconds giây.
  7. Thử yêu cầu lại.
  8. Nhận được phản hồi lỗi có mã lỗi mà bạn có thể thử lại.
  9. Chờ 4 giây + random_number_milliseconds giây.
  10. Thử yêu cầu lại.
  11. Nhận được phản hồi lỗi có mã lỗi mà bạn có thể thử lại.
  12. Chờ 8 giây + random_number_milliseconds giây.
  13. Thử yêu cầu lại.
  14. Nhận được phản hồi lỗi có mã lỗi mà bạn có thể thử lại.
  15. Chờ 16 giây + random_number_milliseconds giây.
  16. Thử yêu cầu lại.
  17. Nếu bạn vẫn gặp lỗi, hãy dừng lại và ghi lại lỗi.

Trong quy trình trên, random_number_milliseconds là một số mili giây ngẫu nhiên nhỏ hơn hoặc bằng 1.000. Điều này là cần thiết để tránh một số lỗi khoá nhất định trong một số lần triển khai đồng thời. random_number_milliseconds phải được xác định lại sau mỗi lần chờ.

Lưu ý: Thời gian chờ luôn là (2 ^ n) + random_number_milliseconds, trong đó n là một số nguyên tăng đơn điệu ban đầu được xác định là 0. Biến n được tăng thêm 1 cho mỗi lần lặp (mỗi yêu cầu).

Thuật toán được đặt để kết thúc khi n bằng 5. Mức trần này chỉ áp dụng để ngăn ứng dụng thử lại vô hạn, và dẫn đến tổng độ trễ khoảng 32 giây trước khi một yêu cầu bị coi là "lỗi không thể khôi phục".

Đoạn mã Python sau đây là cách triển khai quy trình ở trên để khôi phục từ các lỗi xảy ra trong phương thức có tên là makeRequest.

import random
import time
from apiclient.errors import HttpError

def makeRequestWithExponentialBackoff(tagmanager):
  """Wrapper to request Google Tag Manager data with exponential backoff.

  The makeRequest method accepts the tagmanager service object, makes API
  requests and returns the response. If any error occurs, the makeRequest
  method is retried using exponential backoff.

  Args:
    tagmanager: The tagmanager service object

  Returns:
    The API response from the makeRequest method.
  """
  for n in range(0, 5):
    try:
      return makeRequest(tagmanager)

    except HttpError, error:
      if error.resp.reason in ['userRateLimitExceeded', 'quotaExceeded']:
        time.sleep((2 ** n) + random.random())

  print "There has been an error, the request never succeeded."