স্ট্যান্ডার্ড ত্রুটি প্রতিক্রিয়া
যদি একটি ম্যানেজমেন্ট 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
ত্রুটি সৃষ্টি করে সেটি অগত্যা ভিন্ন ভিউ (প্রোফাইল) সহ একই প্রশ্নের জন্য একটি ত্রুটি সৃষ্টি করবে না।
সূচকীয় ব্যাকঅফ বাস্তবায়ন
সূচকীয় ব্যাকঅফ হল একটি ক্লায়েন্টের প্রক্রিয়া যা পর্যায়ক্রমে একটি ক্রমবর্ধমান পরিমাণে একটি ব্যর্থ অনুরোধ পুনরায় চেষ্টা করে। এটি নেটওয়ার্ক অ্যাপ্লিকেশনের জন্য একটি আদর্শ ত্রুটি পরিচালনার কৌশল। ম্যানেজমেন্ট এপিআই এই প্রত্যাশার সাথে ডিজাইন করা হয়েছে যে ক্লায়েন্টরা যারা ব্যর্থ অনুরোধগুলি পুনরায় চেষ্টা করতে পছন্দ করে তারা এক্সপোনেনশিয়াল ব্যাকঅফ ব্যবহার করে তা করে। "প্রয়োজনীয়" হওয়ার পাশাপাশি, সূচকীয় ব্যাকঅফ ব্যবহার করা ব্যান্ডউইথ ব্যবহারের দক্ষতা বাড়ায়, সফল প্রতিক্রিয়া পাওয়ার জন্য প্রয়োজনীয় অনুরোধের সংখ্যা হ্রাস করে এবং সমসাময়িক পরিবেশে অনুরোধের থ্রুপুট সর্বাধিক করে।
সাধারণ সূচকীয় ব্যাকঅফ বাস্তবায়নের জন্য প্রবাহ নিম্নরূপ।
- API এ একটি অনুরোধ করুন
- একটি ত্রুটির প্রতিক্রিয়া পান যাতে একটি পুনরায় চেষ্টা-সক্ষম ত্রুটি কোড রয়েছে৷
- 1s +
random_number_milliseconds
সেকেন্ড অপেক্ষা করুন - অনুরোধ পুনরায় চেষ্টা করুন
- একটি ত্রুটির প্রতিক্রিয়া পান যাতে একটি পুনরায় চেষ্টা-সক্ষম ত্রুটি কোড রয়েছে৷
- 2s +
random_number_milliseconds
সেকেন্ড অপেক্ষা করুন - অনুরোধ পুনরায় চেষ্টা করুন
- একটি ত্রুটির প্রতিক্রিয়া পান যাতে একটি পুনরায় চেষ্টা-সক্ষম ত্রুটি কোড রয়েছে৷
- 4s +
random_number_milliseconds
সেকেন্ড অপেক্ষা করুন - অনুরোধ পুনরায় চেষ্টা করুন
- একটি ত্রুটির প্রতিক্রিয়া পান যাতে একটি পুনরায় চেষ্টা-সক্ষম ত্রুটি কোড রয়েছে৷
- 8s +
random_number_milliseconds
সেকেন্ড অপেক্ষা করুন - অনুরোধ পুনরায় চেষ্টা করুন
- একটি ত্রুটির প্রতিক্রিয়া পান যাতে একটি পুনরায় চেষ্টা-সক্ষম ত্রুটি কোড রয়েছে৷
- 16s +
random_number_milliseconds
সেকেন্ড অপেক্ষা করুন - অনুরোধ পুনরায় চেষ্টা করুন
- আপনি যদি এখনও একটি ত্রুটি পান, থামুন এবং ত্রুটি লগ.
উপরের প্রবাহে, 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."