एरर
त्रुटियाँ बाकी सब की तरह JSON में होती हैं, उनके अनुरूप HTTP स्टेटस के साथ और एक कोड के साथ जिस पर आप switch कर सकते हैं। संदेश एक वाक्य है जो आपके लॉग के लिए है, आपके उपयोगकर्ताओं के लिए नहीं; उसके शब्द बदल सकते हैं, कोड कभी नहीं बदलेगा।
त्रुटि एनवेलप
{
"status": "error",
"error": {
"code": "invalid_request",
"message": "Parameter 'lat' must be a number between -90 and 90.",
"param": "lat"
}
}param तब मौजूद होता है जब किसी खास पैरामीटर के कारण समस्या हुई हो। X-Request-Id त्रुटि वाले रिस्पॉन्स पर भी सेट होता है; सपोर्ट से संपर्क करते समय इसे शामिल करें।
कोड
| HTTP | code | कब | क्या करें |
|---|---|---|---|
| 400 | invalid_request | कोई ज़रूरी पैरामीटर गायब है, कोई मान गलत रूप में है या सीमा से बाहर है, बैच में 100 से ज़्यादा बिंदु या पते हैं, 10 से ज़्यादा परिणाम माँगे गए हैं। | अनुरोध ठीक करें। बिना बदलाव के दोबारा न भेजें। |
| 401 | missing_key | कोई कुंजी नहीं भेजी गई और इस सर्वर पर बिना कुंजी वाला एक्सेस बंद है। डिफ़ॉल्ट रूप से यह चालू रहता है और बिना कुंजी वाले अनुरोध का जवाब सीधे मिल जाता है। | कुंजी X-API-Key, bearer टोकन या key= के रूप में भेजें। |
| 429 | quota_exceeded | पते ने बिना कुंजी के आज के अपने 2,500 मुफ़्त अनुरोध इस्तेमाल कर लिए हैं। | रीसेट का इंतज़ार करें (Retry-After और X-Quota-Reset बताते हैं कब), या ऐसी कुंजी भेजें जिसमें क्रेडिट हो या जो Unlimited पैकेज की हो। |
| 401 | invalid_key | कुंजी मौजूद नहीं है। | टाइपिंग की गलती या अधूरी कॉपी की जाँच करें। |
| 401 | key_revoked | कुंजी डैशबोर्ड में रद्द कर दी गई थी। | कोई मौजूदा कुंजी इस्तेमाल करें। |
| 402 | no_credits | कुंजी का आज का मुफ़्त कोटा इस्तेमाल हो चुका है और खाते का क्रेडिट बैलेंस खाली है। | डैशबोर्ड में कार्ड या क्रिप्टो से क्रेडिट जोड़ें, या रीसेट का इंतज़ार करें। |
| 403 | key_ip_limit | इस कुंजी के सभी IP स्लॉट कुछ समय के लिए दूसरे पतों के पास हैं। | स्लॉट रखने वाली मशीनों में से किसी एक का उपयोग करें, इस मशीन को इसकी अपनी कुंजी दें, या एक पैकेज जोड़ें। IP स्लॉट देखें। |
| 403 | account_suspended | खाता निलंबित है। | हमारा ईमेल देखें या एक टिकट खोलें। |
| 404 | not_found | पाथ मौजूद नहीं है। बिना मिलान वाली क्वेरी खाली परिणामों के साथ 200 होती है, 404 नहीं। | पाथ और वर्ज़न प्रीफ़िक्स जाँचें। |
| 500 | server_error | हमारी तरफ़ कुछ खराब हो गया। | एक सेकंड बाद एक बार दोबारा कोशिश करें। यह लॉग होता है और हमें अलर्ट करता है। गिना नहीं जाता। |
| 503 | unavailable | कोई बैकएंड अस्थायी रूप से उपलब्ध नहीं है। | बैकऑफ़ के साथ दोबारा कोशिश करें। गिना नहीं जाता। |
जो चीज़ें त्रुटियाँ नहीं हैं
- कोई परिणाम नहीं। बेमतलब टेक्स्ट का फ़ॉरवर्ड जियोकोड
"results": []के साथ200लौटाता है। समुद्र में रिवर्स जियोकोड"result": nullके साथ200लौटाता है। दोनों एक अनुरोध के रूप में गिने जाते हैं। - कम सटीकता। जब आप मकान चाहते थे और परिणाम
"precision": "admin"के साथ आया, तो यह एक सफल अनुरोध है जिसे उम्मीद से कम मिला। फ़ील्ड की जाँच करें। - प्राइवेट IP पते।
10.0.0.1देखने पर"is_private": trueऔर बिना स्थान के200मिलता है।
ड्रॉप-इन होस्ट पर त्रुटियाँ
संगतता होस्ट त्रुटियाँ उसी ढाँचे में लौटाते हैं जिसका मूल प्रदाता उपयोग करता है, इसलिए मौजूदा हैंडलिंग काम करती है। उदाहरण के लिए, खाली क्रेडिट बैलेंस gapi.mygeocode.com पर HTTP 200 के साथ "status": "OVER_QUERY_LIMIT" है, bing.mygeocode.com पर Bing एनवेलप में "statusCode": 429 है, और ipapi.mygeocode.com पर {"status":"fail","message":"quota"} है; गलत कुंजी क्रमशः REQUEST_DENIED, 401 और invalid key है। X-Quota-* हेडर हर होस्ट पर हर हाल में भेजे जाते हैं, इसलिए आप चाहें तो हेडर से असली स्थिति पढ़ सकते हैं।
संभालने की एक उचित रणनीति
def call(url, params, tries=3):
for attempt in range(tries):
r = session.get(url, params=params, timeout=10)
if r.status_code == 200:
return r.json()
body = r.json()
code = body["error"]["code"]
if r.status_code in (500, 503):
time.sleep(0.2 * (2 ** attempt))
continue
# no_credits, key_ip_limit, invalid_request, invalid_key: retrying will not help
raise ApiError(code, body["error"]["message"], r.headers.get("X-Request-Id"))
raise ApiError("retries_exhausted", "Gave up after %d attempts" % tries, None)