API ত্রুটিগুলি পরিচালনা করুন৷

ক্যালেন্ডার API দুটি স্তরের ত্রুটি তথ্য প্রদান করে:

  • হেডারে HTTP ত্রুটি কোড এবং বার্তা
  • প্রতিক্রিয়ার অংশে একটি JSON অবজেক্ট, অতিরিক্ত বিবরণ সহ যা আপনাকে ত্রুটিটি কীভাবে পরিচালনা করবেন তা নির্ধারণ করতে সহায়তা করতে পারে।

এই পৃষ্ঠার বাকি অংশে ক্যালেন্ডার ত্রুটির একটি রেফারেন্স রয়েছে, এবং আপনার অ্যাপে সেগুলি কীভাবে পরিচালনা করবেন সে সম্পর্কে কিছু নির্দেশিকা রয়েছে।

সূচকীয় ব্যাকঅফ বাস্তবায়ন করুন

ক্লাউড এপিআই ডকুমেন্টেশনে এক্সপোনেনশিয়াল ব্যাকঅফ এবং গুগল এপিআই-এর সাথে এটি কীভাবে ব্যবহার করতে হয় তার একটি ভাল ব্যাখ্যা রয়েছে।

ত্রুটি এবং প্রস্তাবিত পদক্ষেপ

এই বিভাগটি প্রতিটি তালিকাভুক্ত ত্রুটির সম্পূর্ণ JSON উপস্থাপনা প্রদান করে এবং এটি মোকাবেলা করার জন্য আপনার নেওয়া পদক্ষেপের পরামর্শ দেয়।

৪০০: খারাপ অনুরোধ

ব্যবহারকারীর ত্রুটি। এর অর্থ হতে পারে যে একটি প্রয়োজনীয় ক্ষেত্র বা প্যারামিটার প্রদান করা হয়নি, সরবরাহ করা মান অবৈধ, অথবা প্রদত্ত ক্ষেত্রগুলির সমন্বয় অবৈধ।

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

প্রস্তাবিত পদক্ষেপ: যেহেতু এটি একটি স্থায়ী ত্রুটি, তাই পুনরায় চেষ্টা করবেন না। পরিবর্তে ত্রুটি বার্তাটি পড়ুন এবং সেই অনুযায়ী আপনার অনুরোধ পরিবর্তন করুন।

৪০১: অবৈধ প্রমাণপত্রাদি

অবৈধ অনুমোদন শিরোনাম। আপনি যে অ্যাক্সেস টোকেনটি ব্যবহার করছেন তা হয় মেয়াদোত্তীর্ণ অথবা অবৈধ।

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

প্রস্তাবিত পদক্ষেপ:

  • দীর্ঘস্থায়ী রিফ্রেশ টোকেন ব্যবহার করে একটি নতুন অ্যাক্সেস টোকেন পান।
  • যদি এটি ব্যর্থ হয়, তাহলে ব্যবহারকারীকে OAuth প্রবাহের মাধ্যমে নির্দেশ করুন, যেমনটি OAuth 2.0 দিয়ে অনুরোধ অনুমোদনে বর্ণিত হয়েছে।
  • যদি আপনি এটি কোনও পরিষেবা অ্যাকাউন্টের জন্য দেখতে পান, তাহলে পরীক্ষা করে দেখুন যে আপনি পরিষেবা অ্যাকাউন্ট পৃষ্ঠার সমস্ত ধাপ সফলভাবে সম্পন্ন করেছেন।

৪০৩: ব্যবহারকারীর হারের সীমা অতিক্রম করেছে

ডেভেলপার কনসোলের একটি সীমা অতিক্রম করা হয়েছে।

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

প্রস্তাবিত পদক্ষেপ:

৪০৩: হারের সীমা অতিক্রম করেছে

ব্যবহারকারী প্রতি ক্যালেন্ডার বা অনুমোদিত ব্যবহারকারীর জন্য Google Calendar API-এর সর্বোচ্চ অনুরোধের হারে পৌঁছে গেছেন।

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

প্রস্তাবিত পদক্ষেপ: rateLimitExceeded ত্রুটিগুলি 403 অথবা 429 ত্রুটি কোডগুলি ফেরত দিতে পারে—বর্তমানে এগুলি কার্যকরীভাবে একই রকম এবং একইভাবে প্রতিক্রিয়া জানানো উচিত, exponential backoff ব্যবহার করে। এছাড়াও নিশ্চিত করুন যে আপনার অ্যাপটি manage quotas থেকে সেরা অনুশীলনগুলি অনুসরণ করে।

৪০৩: ক্যালেন্ডার ব্যবহারের সীমা অতিক্রম করেছে

ব্যবহারকারী গুগল ব্যবহারকারী এবং অবকাঠামোকে আপত্তিজনক আচরণ থেকে রক্ষা করার জন্য নির্ধারিত গুগল ক্যালেন্ডারের সীমাগুলির একটিতে পৌঁছেছেন।

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

প্রস্তাবিত পদক্ষেপ:

৪০৩: অ-সংগঠকদের জন্য নিষিদ্ধ

ইভেন্ট আপডেটের অনুরোধটি এমন একটি অনুলিপিতে শেয়ার করা ইভেন্ট প্রপার্টি সেট করার চেষ্টা করছে যা আয়োজকের নয়। শেয়ার করা প্রপার্টি (উদাহরণস্বরূপ, 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": "duplicate",
    "message": "The requested identifier already exists."
   }
  ],
  "code": 409,
  "message": "The requested identifier already exists."
 }
}

প্রস্তাবিত পদক্ষেপ: যদি আপনি একটি নতুন ইনস্ট্যান্স তৈরি করতে চান তবে একটি নতুন আইডি তৈরি করুন, অন্যথায় আপডেট পদ্ধতি কল ব্যবহার করুন।

৪০৯: দ্বন্দ্ব

একটি events.batch অপারেশনের ভিতরে একটি ব্যাচ করা আইটেম অন্যান্য অনুরোধ করা ব্যাচ করা আইটেমের সাথে একটি অপারেশনাল দ্বন্দ্বের কারণে কার্যকর করা যাচ্ছে না।

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

প্রস্তাবিত পদক্ষেপ: সফলভাবে সমাপ্ত এবং স্পষ্টতই ব্যর্থ ব্যাচ করা সমস্ত আইটেম বাদ দিন এবং বাকিগুলি একটি ভিন্ন events.batch বা সংশ্লিষ্ট একক ইভেন্ট অপারেশনে পুনরায় চেষ্টা করুন।

৪১০: চলে গেছে

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 প্যারামিটারের জন্য, স্টোরটি মুছে ফেলুন এবং পুনরায় সিঙ্ক করুন। আরও বিস্তারিত জানার জন্য "Synchronize Resources Efficiently" দেখুন। ইতিমধ্যে মুছে ফেলা ইভেন্টগুলির জন্য, আর কোনও পদক্ষেপ নেওয়ার প্রয়োজন নেই।

৪১২: পূর্বশর্ত ব্যর্থ হয়েছে

If-match হেডারে সরবরাহ করা etag আর রিসোর্সের বর্তমান etag-এর সাথে সঙ্গতিপূর্ণ নয়।

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

প্রস্তাবিত পদক্ষেপ: সত্তাটি পুনরায় আনুন এবং পরিবর্তনগুলি পুনরায় প্রয়োগ করুন। আরও বিস্তারিত জানার জন্য "রিসোর্সের নির্দিষ্ট সংস্করণগুলি পান" দেখুন।

৪২৯: অনেক বেশি অনুরোধ

একটি rateLimitExceeded ত্রুটি ঘটে যখন ব্যবহারকারী নির্দিষ্ট সময়ের মধ্যে অনেক বেশি অনুরোধ পাঠায়।

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

প্রস্তাবিত পদক্ষেপ: rateLimitExceeded ত্রুটিগুলি 403 অথবা 429 ত্রুটি কোডগুলি ফেরত দিতে পারে—বর্তমানে এগুলি কার্যকরীভাবে একই রকম এবং একইভাবে প্রতিক্রিয়া জানানো উচিত, exponential backoff ব্যবহার করে। এছাড়াও নিশ্চিত করুন যে আপনার অ্যাপটি manage quotas থেকে সেরা অনুশীলনগুলি অনুসরণ করে।

৫০০: ব্যাকএন্ড ত্রুটি

অনুরোধটি প্রক্রিয়া করার সময় একটি অপ্রত্যাশিত ত্রুটি ঘটেছে।

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

প্রস্তাবিত পদক্ষেপ: সূচকীয় ব্যাকঅফ ব্যবহার করুন।