ত্রুটি প্রতিক্রিয়া

স্ট্যান্ডার্ড ত্রুটি প্রতিক্রিয়া

যদি একটি ম্যানেজমেন্ট API অনুরোধ সফল হয়, API একটি 200 স্ট্যাটাস কোড প্রদান করে। যদি একটি অনুরোধের সাথে একটি ত্রুটি ঘটে, API ত্রুটির ধরণের উপর ভিত্তি করে প্রতিক্রিয়াতে একটি HTTP স্থিতি কোড, স্থিতি এবং কারণ প্রদান করে। উপরন্তু, প্রতিক্রিয়ার মূল অংশে ত্রুটির কারণের একটি বিশদ বিবরণ রয়েছে। এখানে একটি ত্রুটি প্রতিক্রিয়া একটি উদাহরণ:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalidParameter",
    "message": "Invalid value '-1' for max-results. Value must be within the range: [1, 1000]",
    "locationType": "parameter",
    "location": "max-results"
   }
  ],
  "code": 400,
  "message": "Invalid value '-1' for max-results. Value must be within the range: [1, 1000]"
 }
}

ত্রুটি টেবিল

কোড কারণ বর্ণনা সুপারিশকৃত কাজ
400 invalidParameter নির্দেশ করে যে একটি অনুরোধ প্যারামিটারের একটি অবৈধ মান রয়েছে৷ ত্রুটি প্রতিক্রিয়ার locationType এবং location ক্ষেত্রগুলি কোন মানটি অবৈধ ছিল সে সম্পর্কে তথ্য প্রদান করে৷ সমস্যার সমাধান না করে আবার চেষ্টা করবেন না। ত্রুটি প্রতিক্রিয়াতে নির্দিষ্ট পরামিতির জন্য আপনাকে একটি বৈধ মান প্রদান করতে হবে।
400 badRequest ইঙ্গিত করে যে প্রশ্নটি অবৈধ ছিল৷ যেমন, অভিভাবক আইডি অনুপস্থিত ছিল বা অনুরোধ করা মাত্রা বা মেট্রিক্সের সমন্বয় বৈধ ছিল না। সমস্যার সমাধান না করে আবার চেষ্টা করবেন না। এটি কাজ করার জন্য আপনাকে API ক্যোয়ারীতে পরিবর্তন করতে হবে।
401 invalidCredentials নির্দেশ করে যে প্রমাণীকরণ টোকেনটি অবৈধ বা মেয়াদ শেষ হয়ে গেছে। সমস্যার সমাধান না করে আবার চেষ্টা করবেন না। আপনাকে একটি নতুন প্রমাণীকরণ টোকেন পেতে হবে।
403 insufficientPermissions নির্দেশ করে যে ব্যবহারকারীর কাছে ক্যোয়ারীতে নির্দিষ্ট করা সত্তার জন্য পর্যাপ্ত অনুমতি নেই। সমস্যার সমাধান না করে আবার চেষ্টা করবেন না। নির্দিষ্ট সত্তায় অপারেশন করার জন্য আপনাকে পর্যাপ্ত অনুমতি পেতে হবে।
403 dailyLimitExceeded নির্দেশ করে যে ব্যবহারকারী দৈনিক কোটা অতিক্রম করেছে (হয় প্রতি প্রকল্প বা প্রতি ভিউ (প্রোফাইল))। সমস্যার সমাধান না করে আবার চেষ্টা করবেন না। আপনি আপনার প্রতিদিনের কোটা ব্যবহার করেছেন। API সীমা এবং কোটা দেখুন।
403 userRateLimitExceeded নির্দেশ করে যে প্রতি 100 সেকেন্ড প্রতি ব্যবহারকারীর সীমা অতিক্রম করা হয়েছে। Google API কনসোলে সেট করা ডিফল্ট মান হল ব্যবহারকারী প্রতি 100 সেকেন্ডে 100টি প্রশ্ন। আপনি Google API কনসোলে এই সীমাটি সর্বোচ্চ 1,000-এ বাড়াতে পারেন৷ সূচকীয় ব্যাক-অফ ব্যবহার করে পুনরায় চেষ্টা করুন। আপনি যে হারে অনুরোধ পাঠাচ্ছেন তার গতি কমাতে হবে।
403 rateLimitExceeded ইঙ্গিত করে যে প্রতি 100 সেকেন্ডে প্রকল্পের প্রশ্নগুলির হারের সীমা অতিক্রম করা হয়েছে৷ সূচকীয় ব্যাক-অফ ব্যবহার করে পুনরায় চেষ্টা করুন। আপনি যে হারে অনুরোধ পাঠাচ্ছেন তার গতি কমাতে হবে।
403 quotaExceeded নির্দেশ করে যে কোর রিপোর্টিং এপিআই-এর প্রতি ভিউ (প্রোফাইল) 10টি সমসাময়িক অনুরোধ পৌঁছে গেছে। সূচকীয় ব্যাক-অফ ব্যবহার করে পুনরায় চেষ্টা করুন। এই দৃশ্য (প্রোফাইল) সম্পূর্ণ করার জন্য আপনাকে অন্তত একটি অগ্রগতির অনুরোধের জন্য অপেক্ষা করতে হবে৷
500 internalServerError অপ্রত্যাশিত অভ্যন্তরীণ সার্ভার ত্রুটি ঘটেছে. একবারের বেশি এই ক্যোয়ারীটি আবার চেষ্টা করবেন না।
503 backendError সার্ভার একটি ত্রুটি ফিরিয়ে দিয়েছে৷ একবারের বেশি এই ক্যোয়ারীটি আবার চেষ্টা করবেন না।

500 বা 503 প্রতিক্রিয়া পরিচালনা করা

একটি 500 বা 503 ত্রুটি ভারী লোডের সময় বা আরও বড় জটিল অনুরোধের জন্য হতে পারে। বড় অনুরোধের জন্য একটি সংক্ষিপ্ত সময়ের জন্য ডেটা অনুরোধ বিবেচনা করুন. এছাড়াও সূচকীয় ব্যাকঅফ বাস্তবায়ন বিবেচনা করুন। এই ত্রুটিগুলির ফ্রিকোয়েন্সি ভিউ (প্রোফাইল) এবং সেই দৃশ্যের সাথে সম্পর্কিত রিপোর্টিং ডেটার পরিমাণের উপর নির্ভরশীল হতে পারে; একটি ক্যোয়ারী যা একটি ভিউ (প্রোফাইল) এর জন্য একটি 500 বা 503 ত্রুটি সৃষ্টি করে সেটি অগত্যা ভিন্ন ভিউ (প্রোফাইল) সহ একই প্রশ্নের জন্য একটি ত্রুটি সৃষ্টি করবে না।

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

সূচকীয় ব্যাকঅফ হল একটি ক্লায়েন্টের প্রক্রিয়া যা পর্যায়ক্রমে একটি ক্রমবর্ধমান পরিমাণে একটি ব্যর্থ অনুরোধ পুনরায় চেষ্টা করে। এটি নেটওয়ার্ক অ্যাপ্লিকেশনের জন্য একটি আদর্শ ত্রুটি পরিচালনার কৌশল। ম্যানেজমেন্ট এপিআই এই প্রত্যাশার সাথে ডিজাইন করা হয়েছে যে ক্লায়েন্টরা যারা ব্যর্থ অনুরোধগুলি পুনরায় চেষ্টা করতে পছন্দ করে তারা এক্সপোনেনশিয়াল ব্যাকঅফ ব্যবহার করে তা করে। "প্রয়োজনীয়" হওয়ার পাশাপাশি, সূচকীয় ব্যাকঅফ ব্যবহার করা ব্যান্ডউইথ ব্যবহারের দক্ষতা বাড়ায়, সফল প্রতিক্রিয়া পাওয়ার জন্য প্রয়োজনীয় অনুরোধের সংখ্যা হ্রাস করে এবং সমসাময়িক পরিবেশে অনুরোধের থ্রুপুট সর্বাধিক করে।

সাধারণ সূচকীয় ব্যাকঅফ বাস্তবায়নের জন্য প্রবাহ নিম্নরূপ।

  1. API এ একটি অনুরোধ করুন
  2. একটি ত্রুটির প্রতিক্রিয়া পান যাতে একটি পুনরায় চেষ্টা-সক্ষম ত্রুটি কোড রয়েছে৷
  3. 1s + random_number_milliseconds সেকেন্ড অপেক্ষা করুন
  4. অনুরোধ পুনরায় চেষ্টা করুন
  5. একটি ত্রুটির প্রতিক্রিয়া পান যাতে একটি পুনরায় চেষ্টা-সক্ষম ত্রুটি কোড রয়েছে৷
  6. 2s + random_number_milliseconds সেকেন্ড অপেক্ষা করুন
  7. অনুরোধ পুনরায় চেষ্টা করুন
  8. একটি ত্রুটির প্রতিক্রিয়া পান যাতে একটি পুনরায় চেষ্টা-সক্ষম ত্রুটি কোড রয়েছে৷
  9. 4s + random_number_milliseconds সেকেন্ড অপেক্ষা করুন
  10. অনুরোধ পুনরায় চেষ্টা করুন
  11. একটি ত্রুটির প্রতিক্রিয়া পান যাতে একটি পুনরায় চেষ্টা-সক্ষম ত্রুটি কোড রয়েছে৷
  12. 8s + random_number_milliseconds সেকেন্ড অপেক্ষা করুন
  13. অনুরোধ পুনরায় চেষ্টা করুন
  14. একটি ত্রুটির প্রতিক্রিয়া পান যাতে একটি পুনরায় চেষ্টা-সক্ষম ত্রুটি কোড রয়েছে৷
  15. 16s + random_number_milliseconds সেকেন্ড অপেক্ষা করুন
  16. অনুরোধ পুনরায় চেষ্টা করুন
  17. আপনি যদি এখনও একটি ত্রুটি পান, থামুন এবং ত্রুটি লগ.

উপরের প্রবাহে, random_number_milliseconds হল 1000 এর থেকে কম বা সমান মিলিসেকেন্ডের একটি এলোমেলো সংখ্যা। কিছু সমবর্তী বাস্তবায়নে নির্দিষ্ট লক ত্রুটি এড়াতে এটি প্রয়োজনীয়। random_number_milliseconds অবশ্যই প্রতিটি অপেক্ষার পরে পুনরায় সংজ্ঞায়িত করা উচিত।

দ্রষ্টব্য : অপেক্ষা সর্বদা হয় (2^n) + random_number_milliseconds , যেখানে n হল একটি একঘেয়ে ক্রমবর্ধমান পূর্ণসংখ্যা যা প্রাথমিকভাবে 0 হিসাবে সংজ্ঞায়িত করা হয়। n প্রতিটি পুনরাবৃত্তির (প্রতিটি অনুরোধ) জন্য 1 দ্বারা বৃদ্ধি করা হয়।

n 5 হলে অ্যালগরিদমটি সমাপ্ত হতে সেট করা হয়। এই সিলিংটি কেবলমাত্র ক্লায়েন্টদের অসীমভাবে পুনরায় চেষ্টা করা থেকে বিরত রাখার জন্য এবং এর ফলে একটি অনুরোধ "একটি পুনরুদ্ধারযোগ্য ত্রুটি" হিসাবে বিবেচিত হওয়ার আগে প্রায় 32 সেকেন্ডের মোট বিলম্ব হয়।

নিম্নলিখিত পাইথন কোডটি makeRequest নামে একটি পদ্ধতিতে ঘটে যাওয়া ত্রুটিগুলি থেকে পুনরুদ্ধারের জন্য উপরের প্রবাহের একটি বাস্তবায়ন।

import random
import time
from apiclient.errors import HttpError

def makeRequestWithExponentialBackoff(analytics):
  """Wrapper to request Google Analytics data with exponential backoff.

  The makeRequest method accepts the analytics service object, makes API
  requests and returns the response. If any error occurs, the makeRequest
  method is retried using exponential backoff.

  Args:
    analytics: The analytics service object

  Returns:
    The API response from the makeRequest method.
  """
  for n in range(0, 5):
    try:
      return makeRequest(analytics)

    except HttpError, error:
      if error.resp.reason in ['userRateLimitExceeded', 'quotaExceeded',
                               'internalServerError', 'backendError']:
        time.sleep((2 ** n) + random.random())
      else:
        break

  print "There has been an error, the request never succeeded."