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

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

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

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

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

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

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

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

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: उपयोगकर्ता के लिए अनुरोध की दर की सीमा पार हो गई है

डेवलपर कंसोल की किसी सीमा को पार कर लिया गया है.

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

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

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

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

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

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

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

उपयोगकर्ता ने Google 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."
 }
}

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

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

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."
 }
}

सुझाई गई कार्रवाई: अगर आपको नया इंस्टेंस बनाना है, तो नया आईडी जनरेट करें. इसके अलावा, 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 हेडर में दिया गया ईटीएग, अब संसाधन के मौजूदा ईटीएग से मेल नहीं खाता.

{
 "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"
 }
}

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