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 2.0 দিয়ে অনুরোধ অনুমোদন” অংশে বর্ণিত পদ্ধতি অনুযায়ী ব্যবহারকারীকে OAuth ফ্লো-এর মাধ্যমে নির্দেশিত করুন।
  • আপনি যদি কোনো সার্ভিস অ্যাকাউন্টের জন্য এটি দেখে থাকেন, তাহলে সার্ভিস অ্যাকাউন্ট পেজের সমস্ত ধাপ সফলভাবে সম্পন্ন করেছেন কিনা তা যাচাই করুন।

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

ডেভেলপার কনসোলের একটি সীমায় পৌঁছে গেছি।

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

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

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

ব্যবহারকারী প্রতি ক্যালেন্ডার বা প্রতি প্রমাণীকৃত ব্যবহারকারীর জন্য গুগল ক্যালেন্ডার এপিআই-এর সর্বোচ্চ অনুরোধের হারে পৌঁছে গেছেন।

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

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

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

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

{
 "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 ব্যবহার করার কথা বিবেচনা করুন।
  • আপনার অনুরোধে যদি শেয়ার করা প্রপার্টি থাকে, তাহলে নিশ্চিত করুন যে আপনি শুধুমাত্র আয়োজকের কপি আপডেট করার সময়ই এই প্রপার্টিগুলো পরিবর্তন করার চেষ্টা করছেন।

৪০৪: খুঁজে পাওয়া যায়নি

নির্দিষ্ট রিসোর্সটি খুঁজে পাওয়া যায়নি। এটি বিভিন্ন ক্ষেত্রে ঘটতে পারে। নিচে কয়েকটি উদাহরণ দেওয়া হলো:

  • যখন অনুরোধকৃত রিসোর্সটি (প্রদত্ত আইডি সহ) কখনও বিদ্যমান ছিল না
  • যখন এমন একটি ক্যালেন্ডার অ্যাক্সেস করার চেষ্টা করা হয় যা ব্যবহারকারী অ্যাক্সেস করতে পারে না

    { "error": { "errors": [ { "domain": "global", "reason": "notFound", "message": "খুঁজে পাওয়া যায়নি" } ], "code": 404, "message": "খুঁজে পাওয়া যায়নি" } }

প্রস্তাবিত পদক্ষেপ: এক্সপোনেনশিয়াল ব্যাকঅফ ব্যবহার করুন।

৪০৯: অনুরোধকৃত শনাক্তকারীটি ইতিমধ্যেই বিদ্যমান আছে।

প্রদত্ত আইডি সহ একটি ইনস্ট্যান্স স্টোরেজে ইতিমধ্যেই বিদ্যমান আছে।

{
 "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 এরর কোড রিটার্ন করতে পারে—বর্তমানে এগুলি কার্যগতভাবে একই রকম এবং এক্সপোনেনশিয়াল ব্যাকঅফ ব্যবহার করে একইভাবে প্রতিক্রিয়া জানানো উচিত। এছাড়াও নিশ্চিত করুন যে আপনার অ্যাপ কোটা ব্যবস্থাপনার সেরা অনুশীলনগুলি অনুসরণ করে।

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

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

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

প্রস্তাবিত পদক্ষেপ: এক্সপোনেনশিয়াল ব্যাকঅফ ব্যবহার করুন।