API সংক্রান্ত সমস্যা ম্যানেজ করা

Calendar API দুই লেভেলের সমস্যার তথ্য প্রদান করে:

  • হেডারে HTTP সংক্রান্ত সমস্যার কোড ও মেসেজ
  • রেসপন্স বডিতে অতিরিক্ত বিবরণ সহ একটি JSON অবজেক্ট যা আপনাকে সমস্যাটি কীভাবে সমাধান করবেন তা নির্ধারণ করতে সাহায্য করতে পারে।

এই পৃষ্ঠার বাকি অংশে Calendar-এর সমস্যার রেফারেন্স দেওয়া আছে এবং আপনার অ্যাপে কীভাবে সেগুলি ম্যানেজ করবেন সেই বিষয়ে কিছু নির্দেশিকা দেওয়া আছে।

এক্সপোনেনশিয়াল ব্যাক-অফ প্রয়োগ করা

Cloud APIs ডকুমেন্টেশনে এক্সপোনেনশিয়াল ব্যাকঅফ এবং 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."
 }
}

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

৪০১: ভুল ক্রেডেনশিয়াল

অনুমোদন হেডার সঠিক নয়। আপনি যে অ্যাক্সেস টোকেন ব্যবহার করছেন সেটির মেয়াদ শেষ হয়ে গেছে অথবা সেটি ভুল।

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

সাজেস্ট করা অ্যাকশন:

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

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

Developer Console-এর কোনও একটি সীমা পেরিয়ে গেছে।

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

৪০৩: 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."
 }
}

সাজেস্ট করা অ্যাকশন:

  • আপনি যদি ইভেন্ট: যোগ করুন, ইভেন্ট: ইমপোর্ট করুন অথবা ইভেন্ট: আপডেট করুন ব্যবহার করেন এবং আপনার অনুরোধে কোনও শেয়ার করা প্রপার্টি না থাকে, তাহলে এটি সেগুলিকে ডিফল্ট ভ্যালুতে সেট করার চেষ্টা করার সমতুল্য। পরিবর্তে Events: patch ব্যবহার করার কথা বিবেচনা করুন।
  • আপনার অনুরোধে শেয়ার করা প্রপার্টি থাকলে, আপনি শুধু তখনই এই প্রপার্টি পরিবর্তন করার চেষ্টা করছেন কিনা তা নিশ্চিত করুন, যদি আপনি অর্গানাইজারের কপি আপডেট করেন।

404: পাওয়া যায়নি

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

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

    { "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 প্যারামিটারের জন্য, স্টোর ওয়াইপ করে আবার সিঙ্ক করুন। আরও জানতে, দক্ষতার সাথে রিসোর্স সিঙ্ক্রোনাইজ করুন দেখুন। আগে থেকে মুছে দেওয়া ইভেন্টের ক্ষেত্রে, আর কোনও অ্যাকশন নেওয়ার প্রয়োজন নেই।

৪১২: পূর্বশর্ত পূরণ করা যায়নি

If-match হেডারে যে etag দেওয়া হয়েছে তা রিসোর্সের বর্তমান etag-এর সাথে আর মিলে যায় না।

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

৫০০: ব্যাকএন্ড সংক্রান্ত সমস্যা

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

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

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