การตอบสนองต่อข้อผิดพลาดมาตรฐาน
หากคําขอ Tag Manager API สําเร็จ API จะแสดงรหัสสถานะ HTTP 200
พร้อมกับข้อมูลที่ขอในเนื้อหาของการตอบกลับ
หากข้อผิดพลาดเกิดขึ้นกับคำขอ API จะแสดงรหัสสถานะ HTTP และเหตุผลในการตอบกลับตามประเภทของข้อผิดพลาด นอกจากนี้ ส่วนเนื้อหาของการตอบกลับจะมีคำอธิบายโดยละเอียดเกี่ยวกับสาเหตุที่ทำให้เกิดข้อผิดพลาด ต่อไปนี้คือตัวอย่างของการตอบกลับข้อผิดพลาด
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."
}
}
หมายเหตุ: คำอธิบายอาจมีการเปลี่ยนแปลงได้ทุกเมื่อ ดังนั้นแอปพลิเคชันจึงไม่ควรขึ้นอยู่กับข้อความคำอธิบายจริง
การใช้ Exponential Backoff
ย้อนกลับแบบทวีคูณคือกระบวนการของไคลเอ็นต์ในการลองส่งคำขอที่ล้มเหลวใหม่เป็นระยะๆ โดยใช้ระยะเวลาที่นานขึ้น ซึ่งเป็นกลยุทธ์การจัดการข้อผิดพลาดมาตรฐานสำหรับแอปพลิเคชันเครือข่าย Tag Manager 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
ใหม่หลังจากรอแต่ละครั้ง
หมายเหตุ: การรอจะเป็น (2 ^ n) + random_number_milliseconds
เสมอ โดยที่ n คือจำนวนเต็มเพิ่มแบบจำเจในขั้นต้นซึ่งกำหนดเป็น 0 ตัวแปร n จะเพิ่มขึ้น 1 สำหรับการทำซ้ำแต่ละครั้ง (คำขอแต่ละรายการ)
อัลกอริทึมตั้งค่าให้สิ้นสุดเมื่อ n เท่ากับ 5 เพดานนี้มีไว้เพื่อหยุดไม่ให้ไคลเอ็นต์ลองอีกครั้งแบบไม่จำกัดเท่านั้น ซึ่งจะส่งผลให้เกิดความล่าช้ารวมประมาณ 32 วินาทีก่อนที่คำขอจะถือว่าเป็น "ข้อผิดพลาดที่กู้คืนไม่ได้"
โค้ด Python ต่อไปนี้เป็นการนำโฟลว์ข้างต้นมาใช้เพื่อกู้คืนจากข้อผิดพลาดที่เกิดขึ้นในเมธอดที่เรียกว่า 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."