Phản hồi lỗi

Trang này liệt kê các lỗi mà bạn có thể nhận được từ API Xoá người dùng, đồng thời giải thích cách xử lý lỗi 500triển khai thời gian đợi luỹ thừa.

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

Nếu yêu cầu API Xoá người dùng thành công, API sẽ trả về mã trạng thái 200. Nếu một yêu cầu gặp lỗi, API sẽ trả về mã trạng thái HTTP, trạng thái 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:

 { "error": { "errors": [ { "domain": "global", "reason": "invalidParameter",
"message": "Invalid value '-1' for max-results. Value must be within the range:
[1, 1000]", "locationType": "parameter", "location": "max-results" } ], "code":
400, "message": "Invalid value '-1' for max-results. Value must be within the
range: [1, 1000]" } }

Bảng lỗi

Lý do Mô tả Việc nên làm
400 invalidParameter Cho biết một tham số yêu cầu có giá trị không hợp lệ. Các trường locationTypelocation trong phản hồi lỗi cung cấp thông tin về giá trị không hợp lệ. Đừng thử lại nếu bạn chưa khắc phục vấn đề. Bạn cần cung cấp giá trị hợp lệ cho tham số được chỉ định trong phản hồi lỗi.
400 badRequest Cho biết truy vấn không hợp lệ. Ví dụ: thiếu mã mẹ hoặc tổ hợp phương diện hoặc chỉ số được yêu cầu không hợp lệ. Đừng thử lại nếu bạn chưa khắc phục vấn đề. Bạn cần thay đổi truy vấn API để truy vấn đó có thể hoạt động.
401 invalidCredentials Cho biết mã thông báo xác thực không hợp lệ hoặc đã hết hạn. Đừng thử lại mà không khắc phục vấn đề. Bạn cần nhận mã thông báo xác thực mới.
403 insufficientPermissions Cho biết người dùng không có đủ quyền đối với thực thể được chỉ định trong truy vấn. Đừng thử lại mà không khắc phục vấn đề. Bạn cần có đủ quyền để thực hiện thao tác trên thực thể được chỉ định.
403 dailyLimitExceeded Cho biết người dùng đã vượt quá hạn mức hằng ngày (cho mỗi dự án hoặc cho mỗi chế độ xem (hồ sơ)). Đừng thử lại nếu bạn chưa khắc phục vấn đề. Bạn đã dùng hết hạn mức hằng ngày. Xem bài viết Giới hạn và hạn mức API.
403 userRateLimitExceeded Cho biết đã vượt quá hạn mức Số truy vấn mỗi 100 giây trên mỗi người dùng. Giá trị mặc định được đặt trong Google API Console là 100 truy vấn mỗi 100 giây cho mỗi người dùng. Bạn có thể tăng giới hạn này trong Google API Console lên tối đa 1.000. Thử lại bằng cách sử dụng thời gian đợi luỹ thừa. Bạn cần giảm tốc độ gửi yêu cầu.
403 rateLimitExceeded Cho biết dự án đã vượt quá giới hạn tốc độ số truy vấn mỗi 100 giây. Thử lại bằng cách sử dụng thời gian đợi luỹ thừa. Bạn cần giảm tốc độ gửi yêu cầu.
403 quotaExceeded Cho biết đã đạt đến 10 yêu cầu đồng thời cho mỗi chế độ xem (hồ sơ) trong API Báo cáo chính. Thử lại bằng cách sử dụng tính năng thời gian đợi luỹ thừa. Bạn cần phải đợi ít nhất một yêu cầu đang tiến hành để chế độ xem (hồ sơ) này hoàn tất.
500 internalServerError Đã xảy ra lỗi máy chủ nội bộ ngoài dự kiến. Không thử lại truy vấn này nhiều lần.
503 backendError Máy chủ trả về lỗi. Không thử lại truy vấn này nhiều lần.

Xử lý phản hồi 500 hoặc 503

Lỗi 500 hoặc 503 có thể xảy ra khi tải nhiều hoặc đối với các yêu cầu lớn hơn và phức tạp hơn. Đối với các yêu cầu lớn hơn, hãy cân nhắc yêu cầu dữ liệu trong khoảng thời gian ngắn hơn. Bạn cũng nên cân nhắc việc triển khai thuật toán thời gian đợi luỹ thừa. Tần suất xảy ra các lỗi này có thể phụ thuộc vào chế độ xem (hồ sơ) và lượng dữ liệu báo cáo liên kết với chế độ xem đó. Truy vấn gây ra lỗi 500 hoặc 503 cho một chế độ xem (hồ sơ) không nhất thiết gây ra lỗi cho cùng một truy vấn với một chế độ xem (hồ sơ) khác.

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

Thuật toán 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 các ứng dụng mạng. API Xoá người dùng được thiết kế với kỳ vọng rằng các ứng dụng chọn thử lại các yêu cầu không thành công sẽ thực hiện việc này bằng cách sử dụng thuật toán thời gian đợi luỹ thừa. Ngoài việc "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 để có được phản hồi thành công và tối đa hoá thông lượng yêu cầu trong các môi trường đồng thời.

Sau đây là cách triển khai thuật toán thời gian đợi lũy thừa:

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

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

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

Mã Python sau đây là cách triển khai luồng trước đó để khôi phục các lỗi xảy ra trong một phương thức có tên là makeRequest.

import random
import time
from apiclient.errors import HttpError

def makeRequestWithExponentialBackoff(analytics):
  """Wrapper to request Google Analytics data with exponential backoff.

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

  Args:
    analytics: The analytics service object

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

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

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