गड़बड़ियां ठीक करना

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

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

Gmail ऐप्लिकेशन को REST API का इस्तेमाल करते समय होने वाली सभी गड़बड़ियों का पता लगाना चाहिए और उन्हें ठीक करना चाहिए. इस गाइड में, Gmail API से जुड़ी कुछ गड़बड़ियों को ठीक करने के निर्देश दिए गए हैं.

एचटीटीपी स्टेटस कोड की खास जानकारी

गड़बड़ी का कोड ब्यौरा
200 - OK अनुरोध पूरा हो गया है. यह एचटीटीपी अनुरोधों के पूरा होने पर मिलने वाला स्टैंडर्ड जवाब है.
400 - Bad Request क्लाइंट की गड़बड़ी की वजह से सर्वर, अनुरोध को पूरा नहीं कर सका.
401 - Unauthorized अनुरोध में अमान्य क्रेडेंशियल शामिल हैं.
403 - Forbidden सर्वर को अनुरोध मिल गया है और वह इसे समझ गया है. हालांकि, उपयोगकर्ता के पास अनुरोध पूरा करने की अनुमति नहीं है.
404 - Not Found अनुरोध किया गया संसाधन नहीं मिला.
429 - Too Many Requests API के लिए बहुत ज़्यादा अनुरोध किए गए हैं.
500, 502, 503, 504 - Server Errors अनुरोध को प्रोसेस करते समय कोई गड़बड़ी हुई.

400 गड़बड़ियां

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

badRequest

आपके कोड में इनमें से किसी भी समस्या की वजह से यह गड़बड़ी हो सकती है:

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

इस गड़बड़ी को JSON के इस उदाहरण में दिखाया गया है:

{
  "error": {
    "code": 400,
    "errors": [
      {
        "domain": "global",
        "location": "orderBy",
        "locationType": "parameter",
        "message": "Sorting is not supported for queries with fullText terms. Results are always in descending relevance order.",
        "reason": "badRequest"
      }
    ],
    "message": "Sorting is not supported for queries with fullText terms. Results are always in descending relevance order."
  }
}

इस गड़बड़ी को ठीक करने के लिए, message फ़ील्ड की वैल्यू देखें और अपने कोड में ज़रूरी बदलाव करें.

401 गड़बड़ियां

इन गड़बड़ियों का मतलब है कि अनुरोध में मान्य ऐक्सेस टोकन शामिल नहीं है.

authError

यह गड़बड़ी तब होती है, जब इस्तेमाल किया जा रहा ऐक्सेस टोकन या तो काम नहीं कर रहा हो या अमान्य हो. अनुरोध किए गए स्कोप के लिए अनुमति न होने की वजह से भी यह गड़बड़ी हो सकती है. इस गड़बड़ी को JSON के इस उदाहरण में दिखाया गया है:

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

इस गड़बड़ी को ठीक करने के लिए, लंबे समय तक इस्तेमाल किए जा सकने वाले रीफ़्रेश टोकन का इस्तेमाल करके, ऐक्सेस टोकन को रीफ़्रेश करें. अगर क्लाइंट लाइब्रेरी का इस्तेमाल किया जा रहा है, तो यह टोकन को अपने-आप रीफ़्रेश करती है. अगर ऐसा नहीं होता है, तो उपयोगकर्ता को OAuth फ़्लो के बारे में बताएं. इसके बारे में पहचान की पुष्टि करने और अनुमति देने के बारे में जानें लेख में बताया गया है.

Gmail के इस्तेमाल की सीमाओं के बारे में ज़्यादा जानने के लिए, इस्तेमाल की सीमाएं लेख पढ़ें.

403 गड़बड़ियां

ये गड़बड़ियां तब होती हैं, जब इस्तेमाल करने की सीमा पार हो जाती है या उपयोगकर्ता के पास सही अनुमतियां नहीं होती हैं. समस्या की वजह का पता लगाने के लिए, दिखाए गए JSON के reason फ़ील्ड का आकलन करें. यह गड़बड़ी इन स्थितियों में होती है:

  • आपका ऐप्लिकेशन, पुष्टि किए गए उपयोगकर्ता के डोमेन में इस्तेमाल नहीं किया जा सकता.
  • प्रोजेक्ट के लिए, रोज़ की सीमा पार हो गई है.
  • उपयोगकर्ता ने अनुरोध दर की सीमा पार कर ली है.
  • प्रोजेक्ट के लिए, अनुरोधों की संख्या तय सीमा से ज़्यादा हो गई है.

ज़्यादा जानकारी के लिए, इस्तेमाल करने की सीमाएं लेख पढ़ें.

dailyLimitExceeded

यह गड़बड़ी तब होती है, जब आपका प्रोजेक्ट एपीआई की सीमा तक पहुंच जाता है. इस गड़बड़ी को यहां दिए गए JSON के उदाहरण में दिखाया गया है:

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

यह गड़बड़ी तब होती है, जब ऐप्लिकेशन का मालिक, किसी संसाधन के इस्तेमाल पर सीमा तय करता है. इस गड़बड़ी को ठीक करने के लिए, Google Cloud प्रोजेक्ट में कोटे को बढ़ाएं. ज़्यादा जानकारी के लिए, कोटा की सीमाएं मैनेज करना लेख पढ़ें.

domainPolicy

यह गड़बड़ी तब होती है, जब उपयोगकर्ता के डोमेन के लिए बनी नीति के तहत, आपके ऐप्लिकेशन को Gmail ऐक्सेस करने की अनुमति नहीं होती. इस गड़बड़ी को JSON फ़ॉर्मैट में इस तरह दिखाया गया है:

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "domainPolicy",
        "message": "The domain administrators have disabled Gmail apps."
      }
    ],
    "code": 403,
    "message": "The domain administrators have disabled Gmail apps."
  }
}

इस गड़बड़ी को ठीक करने के लिए, यह तरीका आज़माएं:

  1. उपयोगकर्ता को बताएं कि डोमेन, आपके ऐप्लिकेशन को Gmail ऐक्सेस करने की अनुमति नहीं देता.
  2. उपयोगकर्ता को निर्देश दें कि वह आपके ऐप्लिकेशन का ऐक्सेस पाने के लिए, अपने डोमेन एडमिन से संपर्क करे.

rateLimitExceeded

इस गड़बड़ी का मतलब है कि उपयोगकर्ता ने Gmail API के लिए अनुरोध दर की तय सीमा पूरी कर ली है. यह सीमा, अनुरोध के टाइप के हिसाब से अलग-अलग होती है. नीचे दिए गए JSON के उदाहरण में, इस गड़बड़ी को दिखाया गया है:

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

इस गड़बड़ी को ठीक करने के लिए, यह तरीका आज़माएं:

userRateLimitExceeded

यह गड़बड़ी तब होती है, जब कोई अनुरोध, उपयोगकर्ता के हिसाब से तय की गई सीमा तक पहुंच जाता है. इस गड़बड़ी को यहां दिए गए JSON के उदाहरण में दिखाया गया है:

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

इस गड़बड़ी को ठीक करने के लिए, अपने ऐप्लिकेशन कोड को ऑप्टिमाइज़ करें, ताकि कम अनुरोध किए जा सकें. इसके अलावा, अनुरोध को फिर से करने के लिए एक्सपोनेंशियल बैकऑफ़ का इस्तेमाल करें.

429 गड़बड़ियां

429 "बहुत ज़्यादा अनुरोध" वाली गड़बड़ी इन वजहों से हो सकती है: हर उपयोगकर्ता के लिए तय की गई रोज़ाना की सीमाएं (इसमें ईमेल भेजने की सीमाएं भी शामिल हैं), बैंडविथ की सीमाएं या हर उपयोगकर्ता के लिए एक साथ किए जाने वाले अनुरोधों की सीमा. हर सीमा के बारे में यहां जानकारी दी गई है. हालांकि, हर सीमा से जुड़ी समस्या को हल किया जा सकता है. इसके लिए, अनुरोध फिर से भेजें या एक से ज़्यादा Gmail खातों में प्रोसेसिंग को बांटें.

हर उपयोगकर्ता के लिए तय की गई सीमाएं नहीं बढ़ाई जा सकतीं. सीमाओं के बारे में ज़्यादा जानने के लिए, इस्तेमाल करने की सीमाएं देखें.

ईमेल भेजने की सीमाएं

Gmail API, ईमेल भेजने की रोज़ की तय सीमाएं लागू करता है. ये सीमाएं, Google Workspace के पैसे चुकाकर इस्तेमाल करने वाले उपयोगकर्ताओं और बिना किसी शुल्क के gmail.com का इस्तेमाल करने वाले उपयोगकर्ताओं के लिए अलग-अलग होती हैं. इन सीमाओं के बारे में जानने के लिए, Google Workspace में Gmail से ईमेल भेजने की सीमाएं लेख पढ़ें.

ये सीमाएं हर उपयोगकर्ता के लिए होती हैं. इन्हें उपयोगकर्ता के सभी क्लाइंट शेयर करते हैं. ये क्लाइंट, एपीआई क्लाइंट, बिल्ट-इन या वेब क्लाइंट या एसएमटीपी एमएसए हो सकते हैं. इन सीमाओं से ज़्यादा अनुरोध करने पर, एपीआई एचटीटीपी 429 "बहुत ज़्यादा अनुरोध: उपयोगकर्ता के लिए तय की गई सीमा पार हो गई है (ईमेल भेजने)" गड़बड़ी का मैसेज दिखाता है. साथ ही, अनुरोध फिर से करने का समय भी बताता है. एक दिन में तय की गई सीमा से ज़्यादा अनुरोध करने पर, सर्वर के अनुरोध स्वीकार करने से पहले कई घंटों तक ये गड़बड़ियां दिख सकती हैं.

ईमेल भेजने की पाइपलाइन काफ़ी जटिल होती है: जब कोई उपयोगकर्ता अपनी तय सीमा से ज़्यादा ईमेल भेज देता है, तो एपीआई को 429 गड़बड़ी वाले जवाब भेजने में कई मिनट लग सकते हैं. यह नहीं माना जा सकता कि 200 रिस्पॉन्स का मतलब है कि ईमेल भेज दिया गया है.

बैंडविड्थ की सीमाएं

इस एपीआई में, हर उपयोगकर्ता के लिए अपलोड और डाउनलोड करने की बैंडविड्थ की सीमाएं होती हैं. ये सीमाएं, IMAP के बराबर होती हैं, लेकिन इससे अलग होती हैं. ये सीमाएं, किसी उपयोगकर्ता के लिए सभी Gmail API क्लाइंट के साथ शेयर की जाती हैं.

आम तौर पर, उपयोगकर्ताओं को ये सीमाएं सिर्फ़ खास या गलत इस्तेमाल की स्थितियों में दिखती हैं. अगर आपने इन सीमाओं का उल्लंघन किया है, तो एपीआई, एचटीटीपी 429 "Too many requests: User-rate limit exceeded" गड़बड़ी का मैसेज दिखाता है. साथ ही, यह भी बताता है कि आपको कब फिर से कोशिश करनी चाहिए. रोज़ाना की सीमाएं पार करने पर, सर्वर के अनुरोध स्वीकार करने से पहले कई घंटों तक ये गड़बड़ियां हो सकती हैं.

एक साथ किए गए अनुरोध

Gmail API, हर उपयोगकर्ता के लिए एक साथ किए जाने वाले अनुरोधों की सीमा लागू करता है. यह सीमा, हर उपयोगकर्ता के लिए दर की सीमा के अलावा होती है. यह सीमा, किसी उपयोगकर्ता के डेटा को ऐक्सेस करने वाले सभी Gmail API क्लाइंट के लिए होती है. इससे यह पक्का किया जाता है कि कोई भी एपीआई क्लाइंट, Gmail उपयोगकर्ता के मेलबॉक्स या उनके बैकएंड सर्वर पर ज़्यादा लोड न डाले.

किसी एक उपयोगकर्ता के लिए एक साथ कई अनुरोध करने या बड़ी संख्या में अनुरोध वाले बैच भेजने पर, यह गड़बड़ी दिख सकती है. अगर कई एपीआई क्लाइंट, Gmail उपयोगकर्ता के मेलबॉक्स को एक साथ ऐक्सेस करते हैं, तो भी यह गड़बड़ी दिख सकती है. अगर इस सीमा से ज़्यादा अनुरोध किए जाते हैं, तो एपीआई, एचटीटीपी 429 "बहुत ज़्यादा अनुरोध: उपयोगकर्ता के लिए एक साथ बहुत ज़्यादा अनुरोध किए गए" गड़बड़ी का मैसेज दिखाता है.

500, 502, 503, 504 गड़बड़ियां

ये गड़बड़ियां तब होती हैं, जब अनुरोध को प्रोसेस करते समय सर्वर में कोई गड़बड़ी होती है. इन गड़बड़ियों की कई वजहें हो सकती हैं. जैसे, किसी अनुरोध के समय का किसी दूसरे अनुरोध के समय से मेल खाना या किसी ऐसी कार्रवाई के लिए अनुरोध करना जिसे अनुमति नहीं है. उदाहरण के लिए, पूरी साइट के बजाय Google Sites में किसी एक पेज के लिए अनुमतियां अपडेट करने की कोशिश करना.

5xx गड़बड़ियों की सूची यहां दी गई है:

  • 500 बैकएंड में गड़बड़ी
  • 502 खराब गेटवे
  • 503 सेवा उपलब्ध नहीं है
  • 504 कोड वाली गड़बड़ी: गेटवे का समय खत्म हो गया है

backendError

अनुरोध को प्रोसेस करते समय कोई गड़बड़ी होने पर, यह मैसेज दिखता है. इस गड़बड़ी को JSON के इस उदाहरण में दिखाया गया है:

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

इस गड़बड़ी को ठीक करने के लिए, अनुरोध को फिर से करने के लिए एक्सपोनेंशियल बैकऑफ़ का इस्तेमाल करें.

गड़बड़ियों को ठीक करने के लिए, पूरे न हो पाने वाले अनुरोधों को फिर से भेजें

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

गड़बड़ी होने के कम से कम एक सेकंड बाद, फिर से कोशिश करने की अवधि शुरू करें.

कोटे की सीमाएं मैनेज करना

अपने प्रोजेक्ट के लिए इस्तेमाल की सीमाएं देखने या उनमें बदलाव करने के लिए, यह तरीका अपनाएं. इसके अलावा, कोटा बढ़ाने का अनुरोध करने के लिए भी यह तरीका अपनाएं:

  1. अगर आपके प्रोजेक्ट के लिए पहले से कोई बिलिंग खाता नहीं है, तो एक खाता बनाएं.
  2. एपीआई कंसोल में, एपीआई लाइब्रेरी के 'चालू किए गए एपीआई' पेज पर जाएं और सूची में से कोई एपीआई चुनें.
  3. कोटे से जुड़ी सेटिंग देखने और बदलने के लिए, कोटे को चुनें. इस्तेमाल के आंकड़े देखने के लिए, इस्तेमाल को चुनें.

ज़्यादा जानकारी के लिए, कोटा देखना और मैनेज करना लेख पढ़ें.

एक साथ ग्रुप या बैच में भेजे गए अनुरोध

बैच अनुरोधों से परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. हालांकि, बैच का साइज़ बड़ा होने पर, दर सीमित करने की सुविधा ट्रिगर हो सकती है. 50 से ज़्यादा अनुरोधों वाले बैच न भेजें. अनुरोधों को बैच में भेजने के तरीके के बारे में जानने के लिए, बैच में अनुरोध भेजना लेख पढ़ें.