การตอบกลับข้อผิดพลาดมาตรฐาน
หากคำขอ 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
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."