एपीआई की गड़बड़ियों को ठीक करें

Google Calendar API, गड़बड़ी की जानकारी के दो लेवल दिखाता है:

  • हेडर में एचटीटीपी गड़बड़ी के कोड और मैसेज
  • जवाब के मुख्य हिस्से में मौजूद JSON ऑब्जेक्ट में, गड़बड़ी के बारे में ज़्यादा जानकारी होती है. इससे आपको यह तय करने में मदद मिलती है कि गड़बड़ी को कैसे ठीक किया जाए.

इस पेज के बाकी हिस्से में, Calendar API से जुड़ी गड़बड़ियों के बारे में जानकारी दी गई है. साथ ही, उन्हें अपने ऐप्लिकेशन में ठीक करने के बारे में कुछ दिशा-निर्देश दिए गए हैं.

एक्स्पोनेंशियल बैकऑफ़ लागू करना

Google Cloud Storage के दस्तावेज़ में, एक्सपोनेंशियल बैकऑफ़ के बारे में बताया गया है. साथ ही, इसमें Google API के साथ इसका इस्तेमाल करने का तरीका भी बताया गया है.

गड़बड़ियां और सुझाई गई कार्रवाइयां

इस सेक्शन में, सूची में शामिल हर गड़बड़ी को JSON फ़ॉर्मैट में दिखाया गया है. साथ ही, गड़बड़ी को ठीक करने के लिए सुझाई गई कार्रवाइयां भी दी गई हैं.

400: गलत अनुरोध

उपयोगकर्ता की गड़बड़ी. यह गड़बड़ी तब होती है, जब आपने कोई ज़रूरी फ़ील्ड या पैरामीटर नहीं दिया हो, अमान्य वैल्यू दी हो या फ़ील्ड का अमान्य कॉम्बिनेशन दिया हो.

{
  "error": {
    "errors": [
      {
        "domain": "calendar",
        "reason": "timeRangeEmpty",
        "message": "The specified time range is empty.",
        "locationType": "parameter",
        "location": "timeMax"
      }
    ],
    "code": 400,
    "message": "The specified time range is empty."
  }
}

सुझाया गया तरीका: यह गड़बड़ी हमेशा बनी रहती है. इसलिए, फिर से कोशिश न करें. इसके बजाय, गड़बड़ी का मैसेज पढ़ें और उसके मुताबिक अपने अनुरोध में बदलाव करें.

401: अमान्य क्रेडेंशियल

अमान्य ऑथराइज़ेशन हेडर. आपके इस्तेमाल किए जा रहे ऐक्सेस टोकन की समयसीमा खत्म हो गई है या वह अमान्य है.

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "authError",
        "message": "Invalid Credentials",
        "locationType": "header",
        "location": "Authorization"
      }
    ],
    "code": 401,
    "message": "Invalid Credentials"
  }
}

सुझाई गई कार्रवाइयां:

  • ज़्यादा समय तक इस्तेमाल किए जा सकने वाले रीफ़्रेश टोकन का इस्तेमाल करके, नया ऐक्सेस टोकन पाएं.
  • अगर ऐसा नहीं होता है, तो उपयोगकर्ता को OAuth फ़्लो के ज़रिए आगे बढ़ाएं. इसके बारे में OAuth 2.0 की मदद से अनुरोधों को अनुमति देना लेख में बताया गया है.
  • अगर यह गड़बड़ी किसी सेवा खाते के लिए होती है, तो पक्का करें कि आपने सेवा खाते वाले पेज पर दिए गए सभी चरणों को पूरा कर लिया हो.

403: User Rate Limit Exceeded

Google Cloud Console की किसी एक सीमा तक पहुंच गया है.

{
  "error": {
    "errors": [
      {
        "domain": "usageLimits",
        "reason": "userRateLimitExceeded",
        "message": "User Rate Limit Exceeded"
      }
    ],
    "code": 403,
    "message": "User Rate Limit Exceeded"
  }
}

सुझाई गई कार्रवाइयां:

403: अनुरोधों की दर तय सीमा से ज़्यादा है

उपयोगकर्ता ने Calendar API के लिए, हर कैलेंडर या पुष्टि किए गए हर उपयोगकर्ता के लिए अनुरोध करने की तय सीमा पूरी कर ली है.

{
  "error": {
    "errors": [
      {
        "domain": "usageLimits",
        "reason": "rateLimitExceeded",
        "message": "Rate Limit Exceeded"
      }
    ],
    "code": 403,
    "message": "Rate Limit Exceeded"
  }
}

सुझाया गया तरीका: rateLimitExceeded गड़बड़ियों के लिए, 403 या 429 गड़बड़ी कोड दिख सकते हैं. ये दोनों गड़बड़ी कोड एक जैसे होते हैं. इसलिए, आपको इन्हें एक ही तरीके से ठीक करना चाहिए. इसके लिए, एक्सपोनेंशियल बैकऑफ़ का इस्तेमाल करें. इसके अलावा, पक्का करें कि आपका ऐप्लिकेशन, कोटा मैनेज करने से जुड़े सबसे सही तरीकों का पालन करता हो.

403: कैलेंडर इस्तेमाल करने की सीमाएं पार हो गई हैं

उपयोगकर्ता ने Calendar की किसी सीमा को पार कर लिया है. ये सीमाएं, Google के उपयोगकर्ताओं और इंफ़्रास्ट्रक्चर को गलत इस्तेमाल से बचाने के लिए तय की गई हैं.

{
  "error": {
    "errors": [
      {
        "domain": "usageLimits",
        "message": "Calendar usage limits exceeded.",
        "reason": "quotaExceeded"
      }
    ],
    "code": 403,
    "message": "Calendar usage limits exceeded."
  }
}

सुझाई गई कार्रवाइयां:

403: आयोजक के अलावा अन्य लोगों के लिए अनुमति नहीं है

इवेंट अपडेट करने का अनुरोध, शेयर किए गए इवेंट की किसी ऐसी प्रॉपर्टी को सेट करने की कोशिश कर रहा है जो आयोजक की कॉपी में नहीं है. सिर्फ़ आयोजक, शेयर की गई प्रॉपर्टी (जैसे कि guestsCanInviteOthers, guestsCanModify या guestsCanSeeOtherGuests) सेट कर सकता है.

{
  "error": {
    "errors": [
      {
        "domain": "calendar",
        "reason": "forbiddenForNonOrganizer",
        "message": "Shared properties can only be changed by the organizer of the event."
      }
    ],
    "code": 403,
    "message": "Shared properties can only be changed by the organizer of the event."
  }
}

सुझाई गई कार्रवाइयां:

  • अगर Events: insert, Events: import या Events: update का इस्तेमाल किया जा रहा है और आपके अनुरोध में कोई भी शेयर की गई प्रॉपर्टी शामिल नहीं है, तो इसका मतलब है कि उन्हें उनकी डिफ़ॉल्ट वैल्यू पर सेट करने की कोशिश की जा रही है. इसके बजाय, Events: patch का इस्तेमाल करें.
  • अगर आपके अनुरोध में शेयर की गई प्रॉपर्टी हैं, तो पक्का करें कि आयोजक की कॉपी अपडेट करते समय, सिर्फ़ इन प्रॉपर्टी में बदलाव किया जा रहा हो.

404: नहीं मिला

बताया गया संसाधन नहीं मिला. ऐसा कई मामलों में हो सकता है. यहां कुछ उदाहरण दिए गए हैं:

  • जब अनुरोध किया गया संसाधन (दिए गए आईडी के साथ) कभी मौजूद ही नहीं था.
  • जब उपयोगकर्ता ऐसे कैलेंडर को ऐक्सेस करने की कोशिश करता है जिसे वह ऐक्सेस नहीं कर सकता.
{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "notFound",
        "message": "Not Found"
      }
    ],
    "code": 404,
    "message": "Not Found"
  }
}

सुझाई गई कार्रवाई: एक्स्पोनेंशियल बैकऑफ़ का इस्तेमाल करें.

409: अनुरोध किया गया आइडेंटिफ़ायर पहले से मौजूद है

दिए गए आईडी वाला इंस्टेंस, स्टोरेज में पहले से मौजूद है.

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "duplicate",
        "message": "The requested identifier already exists."
      }
    ],
    "code": 409,
    "message": "The requested identifier already exists."
  }
}

सुझाया गया तरीका: अगर आपको नया इंस्टेंस बनाना है, तो नया आईडी जनरेट करें. इसके अलावा, events.update तरीके का इस्तेमाल करें.

409: कॉन्फ़्लिक्ट

events.batch ऑपरेशन में शामिल किसी बैच किए गए आइटम को इसलिए नहीं चलाया जा सकता, क्योंकि ऑपरेशन से जुड़ी समस्या की वजह से, बैच किए गए अन्य आइटम के लिए किए गए अनुरोध पूरे नहीं किए जा सकते.

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "conflict",
        "message": "Conflict"
      }
    ],
    "code": 409,
    "message": "Conflict"
  }
}

सुझाई गई कार्रवाई: पूरे हो चुके और फ़ेल हो चुके आइटम हटाएं. इसके बाद, बचे हुए आइटम को किसी दूसरे events.batch या उससे जुड़े किसी एक इवेंट के ऑपरेशन में फिर से आज़माएं.

410: मौजूद नहीं है

syncToken या updatedMin पैरामीटर अब मान्य नहीं हैं. यह गड़बड़ी तब भी हो सकती है, जब कोई अनुरोध ऐसे इवेंट को मिटाने की कोशिश करता है जिसे पहले ही मिटा दिया गया है.

{
  "error": {
    "errors": [
      {
        "domain": "calendar",
        "reason": "fullSyncRequired",
        "message": "Sync token is no longer valid, a full sync is required.",
        "locationType": "parameter",
        "location": "syncToken"
      }
    ],
    "code": 410,
    "message": "Sync token is no longer valid, a full sync is required."
  }
}

या

{
  "error": {
    "errors": [
      {
        "domain": "calendar",
        "reason": "updatedMinTooLongAgo",
        "message": "The requested minimum modification time lies too far in the past.",
        "locationType": "parameter",
        "location": "updatedMin"
      }
    ],
    "code": 410,
    "message": "The requested minimum modification time lies too far in the past."
  }
}

या

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "deleted",
        "message": "Resource has been deleted"
      }
    ],
    "code": 410,
    "message": "Resource has been deleted"
  }
}

सुझाई गई कार्रवाई: syncToken या updatedMin पैरामीटर के लिए, स्टोर का डेटा मिटाएं और फिर से सिंक करें. ज़्यादा जानकारी के लिए, संसाधनों को बेहतर तरीके से सिंक करना लेख पढ़ें. पहले से मिटाए गए इवेंट के लिए, कोई और कार्रवाई करने की ज़रूरत नहीं है.

412: पहले से तय की गई शर्त पूरी नहीं की गई

If-Match हेडर में दिया गया ETag, अब संसाधन के मौजूदा ETag से मेल नहीं खाता.

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "conditionNotMet",
        "message": "Precondition Failed",
        "locationType": "header",
        "location": "If-Match"
      }
    ],
    "code": 412,
    "message": "Precondition Failed"
  }
}

सुझाई गई कार्रवाई: इकाई को फिर से फ़ेच करें और बदलावों को फिर से लागू करें. ज़्यादा जानकारी के लिए, संसाधनों के खास वर्शन पाना लेख पढ़ें.

429: बहुत ज़्यादा अनुरोध किए गए

rateLimitExceeded गड़बड़ी तब होती है, जब उपयोगकर्ता तय समय में बहुत ज़्यादा अनुरोध भेजता है.

{
  "error": {
    "errors": [
      {
        "domain": "usageLimits",
        "reason": "rateLimitExceeded",
        "message": "Rate Limit Exceeded"
      }
    ],
    "code": 429,
    "message": "Rate Limit Exceeded"
  }
}

सुझाया गया तरीका: rateLimitExceeded गड़बड़ियों के लिए, 403 या 429 गड़बड़ी कोड दिख सकते हैं. ये दोनों गड़बड़ी कोड एक जैसे होते हैं. इसलिए, आपको इन्हें एक ही तरीके से ठीक करना चाहिए. इसके लिए, एक्सपोनेंशियल बैकऑफ़ का इस्तेमाल करें. इसके अलावा, पक्का करें कि आपका ऐप्लिकेशन, कोटा मैनेज करने से जुड़े सबसे सही तरीकों का पालन करता हो.

500: बैकएंड में गड़बड़ी

अनुरोध को प्रोसेस करते समय कोई गड़बड़ी हुई.

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "backendError",
        "message": "Backend Error"
      }
    ],
    "code": 500,
    "message": "Backend Error"
  }
}

सुझाई गई कार्रवाई: एक्स्पोनेंशियल बैकऑफ़ का इस्तेमाल करें.