หน้านี้จะแสดงข้อผิดพลาดที่คุณอาจได้รับจาก User Deletion API และอธิบายวิธีจัดการกับข้อผิดพลาด 500 และใช้งาน Exponential Backoff
การตอบกลับข้อผิดพลาดมาตรฐาน
หากคำขอ User Deletion API สำเร็จ API จะแสดงรหัสสถานะ 200
หากข้อผิดพลาดเกิดขึ้นกับคำขอ API จะแสดงรหัสสถานะ HTTP, สถานะ และเหตุผลในการตอบกลับตามประเภทของข้อผิดพลาด นอกจากนี้ เนื้อความของคำตอบยังมีคำอธิบายโดยละเอียดเกี่ยวกับสาเหตุของข้อผิดพลาด ตัวอย่างการตอบกลับข้อผิดพลาดมีดังนี้
{ "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]" } }
ตารางข้อผิดพลาด
รหัส | เหตุผล | คำอธิบาย | การดำเนินการที่แนะนำ |
---|---|---|---|
400 | invalidParameter |
บ่งชี้ว่าพารามิเตอร์คำขอมีค่าไม่ถูกต้อง ช่อง locationType และ location ในการตอบกลับข้อผิดพลาดจะให้ข้อมูลว่าค่าใดไม่ถูกต้อง |
อย่าลองอีกครั้งโดยไม่แก้ไขปัญหา คุณต้องระบุค่าที่ถูกต้องสำหรับพารามิเตอร์ที่ระบุในการตอบกลับข้อผิดพลาด |
400 | badRequest |
บ่งบอกว่าการค้นหาไม่ถูกต้อง เช่น ไม่มีรหัสหลัก หรือชุดค่าผสมของมิติข้อมูลหรือเมตริกที่ขอไม่ถูกต้อง | โปรดอย่าลองอีกครั้งโดยไม่แก้ไขปัญหา คุณต้องเปลี่ยนแปลงการค้นหา API เพื่อให้ใช้งานได้ |
401 | invalidCredentials |
ระบุว่าโทเค็นการตรวจสอบสิทธิ์ไม่ถูกต้องหรือหมดอายุ | อย่าลองอีกครั้งโดยไม่แก้ไขปัญหา คุณต้องขอโทเค็นการตรวจสอบสิทธิ์ใหม่ |
403 | insufficientPermissions |
บ่งชี้ว่าผู้ใช้ไม่มีสิทธิ์เพียงพอสำหรับเอนทิตีที่ระบุในข้อความค้นหา | โปรดอย่าลองอีกครั้งโดยไม่แก้ไขปัญหา คุณต้องมีสิทธิ์เพียงพอจึงจะดําเนินการกับเอนทิตีที่ระบุได้ |
403 | dailyLimitExceeded |
ระบุว่าผู้ใช้ได้ใช้งานเกินโควต้ารายวันแล้ว (ต่อโปรเจ็กต์หรือต่อข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์)) | โปรดอย่าลองอีกครั้งโดยไม่แก้ไขปัญหา คุณใช้โควต้ารายวันครบแล้ว โปรดดูหัวข้อขีดจำกัดและโควต้า API |
403 | userRateLimitExceeded |
บ่งบอกว่ามีการค้นหาต่อ 100 วินาทีต่อผู้ใช้เกินขีดจำกัด ค่าเริ่มต้นที่ตั้งไว้ในคอนโซล Google API คือ 100 คำค้นหาต่อ 100 วินาทีต่อผู้ใช้ 1 คน คุณสามารถเพิ่มขีดจํากัดนี้ได้ในคอนโซล Google API เป็นจํานวนสูงสุด 1,000 รายการ | ลองอีกครั้งโดยใช้ Exponential Backoff คุณต้องลดอัตราการส่งคำขอ |
403 | rateLimitExceeded |
บ่งบอกว่ามีการค้นหาต่อ 100 วินาทีของโปรเจ็กต์เกินขีดจำกัดอัตราแล้ว | ลองอีกครั้งโดยใช้ Exponential Backoff คุณต้องลดอัตราการส่งคำขอ |
403 | quotaExceeded |
บ่งบอกว่ามีคำขอพร้อมกัน 10 รายการต่อมุมมอง (โปรไฟล์) ใน Core Reporting API แล้ว | ลองอีกครั้งโดยใช้ Exponential Back-off คุณต้องรอคำขอ (โปรไฟล์) ที่อยู่ระหว่างดำเนินการอย่างน้อย 1 รายการจึงจะเสร็จสมบูรณ์ |
500 | internalServerError |
เกิดข้อผิดพลาดภายในเซิร์ฟเวอร์ที่ไม่คาดคิด | อย่าลองค้นหานี้ซ้ำเกิน 1 ครั้ง |
503 | backendError |
เซิร์ฟเวอร์แสดงข้อผิดพลาด | อย่าลองค้นหานี้ซ้ำเกิน 1 ครั้ง |
การจัดการกับคำตอบ 500 หรือ 503
ข้อผิดพลาด 500
หรือ 503
อาจเกิดขึ้นเมื่อมีการโหลดมากหรือคำขอที่ซับซ้อนมากขึ้น สำหรับคำขอจำนวนมาก ให้พิจารณาขอข้อมูลในระยะเวลาสั้นๆ และพิจารณาใช้ Exponential Backoff ด้วย ความถี่ของข้อผิดพลาดเหล่านี้อาจขึ้นอยู่กับมุมมอง (โปรไฟล์) และปริมาณข้อมูลการรายงานที่เชื่อมโยงกับมุมมองนั้น การค้นหาที่ทำให้เกิดข้อผิดพลาด 500
หรือ 503
สำหรับมุมมอง (โปรไฟล์) หนึ่งๆ ไม่จำเป็นต้องทำให้เกิดข้อผิดพลาดสําหรับการค้นหาเดียวกันในมุมมอง (โปรไฟล์) อื่น
ใช้ Exponential Backoff
Exponential Backoff คือกระบวนการที่ไคลเอ็นต์พยายามส่งคำขอที่ล้มเหลวซ้ำเป็นระยะๆ เมื่อเวลาผ่านไป ซึ่งเป็นกลยุทธ์มาตรฐานในการจัดการข้อผิดพลาดสําหรับแอปพลิเคชันเครือข่าย User Deletion API ได้รับการออกแบบโดยคาดหวังว่าไคลเอ็นต์ที่เลือกส่งคำขอที่ดำเนินการไม่สำเร็จอีกครั้งจะใช้ Exponential Backoff นอกจากจะเป็น "สิ่งจําเป็น" แล้ว การใช้ Exponential Backoff ยังช่วยเพิ่มประสิทธิภาพการใช้แบนด์วิดท์ ลดจํานวนคําขอที่จําเป็นต่อการตอบกลับที่ประสบความสําเร็จ และเพิ่มปริมาณข้อมูลสูงสุดของคําขอในสภาพแวดล้อมแบบหลายรายการพร้อมกัน
วิธีใช้ Exponential Backoff มีดังนี้
- ส่งคําขอไปยัง API
- ได้รับคำตอบที่มีข้อผิดพลาดซึ่งมีรหัสข้อผิดพลาดที่ลองใหม่ได้
- รอ 1 วินาที +
random_number_milliseconds
วินาที - ลองส่งคำขออีกครั้ง
- ได้รับคำตอบที่มีข้อผิดพลาดซึ่งมีรหัสข้อผิดพลาดที่ลองใหม่ได้
- รอ 2 วินาที +
random_number_milliseconds
วินาที - ลองส่งคำขออีกครั้ง
- รับการตอบกลับข้อผิดพลาดที่มีรหัสข้อผิดพลาดซึ่งลองอีกครั้งได้
- รอ 4 วินาที +
random_number_milliseconds
วินาที - ลองส่งคำขออีกครั้ง
- รับการตอบกลับข้อผิดพลาดที่มีรหัสข้อผิดพลาดซึ่งลองอีกครั้งได้
- รอ 8 วินาที +
random_number_milliseconds
วินาที - ลองส่งคำขออีกครั้ง
- รับการตอบกลับข้อผิดพลาดที่มีรหัสข้อผิดพลาดซึ่งลองอีกครั้งได้
- รอ 16 วินาที +
random_number_milliseconds
วินาที - ลองส่งคำขออีกครั้ง
- หากยังพบข้อผิดพลาดอยู่ ให้หยุดและบันทึกข้อผิดพลาด
ในขั้นตอนก่อนหน้า random_number_milliseconds
คือจำนวนมิลลิวินาทีแบบสุ่มที่น้อยกว่าหรือเท่ากับ 1, 000 ซึ่งจําเป็นต่อการหลีกเลี่ยงข้อผิดพลาดบางอย่างเกี่ยวกับล็อกในการนําไปใช้พร้อมกัน ต้องระบุ random_number_milliseconds
ใหม่หลังจากที่รอแต่ละครั้ง
อัลกอริทึมได้รับการตั้งค่าให้สิ้นสุดเมื่อ n เป็น 5 ขีดจํากัดนี้มีไว้เพื่อหยุดไม่ให้ไคลเอ็นต์ลองใหม่อย่างไม่สิ้นสุดเท่านั้น และส่งผลให้เกิดความล่าช้าทั้งหมดประมาณ 32 วินาทีก่อนที่ระบบจะถือว่าคําขอเป็น "ข้อผิดพลาดที่แก้ไขไม่ได้"
โค้ด Python ต่อไปนี้เป็นการใช้งานขั้นตอนก่อนหน้าสำหรับการกู้คืนจากข้อผิดพลาดที่เกิดขึ้นในเมธอดที่ชื่อ 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."