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

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

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

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

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

Cloud API से जुड़े दस्तावेज़ में एक्स्पोनेंशियल बैकऑफ़ के बारे में अच्छी तरह से बताया गया है और इसमें यह भी बताया गया है कि इसे 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 2.0 से अनुमति देने के अनुरोध वाला तरीका इस्तेमाल करें. इस बारे में, 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: कैलेंडर का इस्तेमाल करने की सीमाएं पार हो गई हैं

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

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

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

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

404 कोड नहीं मिला

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

  • जब अनुरोध किया गया संसाधन (दिए गए आईडी के साथ) कभी मौजूद न हो
  • जब वह कैलेंडर ऐक्सेस किया जाता है जिसे उपयोगकर्ता ऐक्सेस नहीं कर सकता

    { "गड़बड़ी": { "errors": [ { "domain": "global", "reason": "notFound", "message": "Not Found" } ], "code": 404, "message": "नहीं मिला" } }

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

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

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

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

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

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

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