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

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

যদি একটি Tag Manager API অনুরোধ সফল হয়, তাহলে API প্রতিক্রিয়ার মূল অংশে অনুরোধ করা ডেটা সহ একটি 200 HTTP স্ট্যাটাস কোড প্রদান করে।

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

400 invalidParameter

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "accessNotConfigured",
    "message": "Access Not Configured. Please use Google Developers Console to activate the API for your project.",
   }
  ],
  "code": 403,
  "message": "Access Not Configured. Please use Google Developers Console to activate the API for your project."
 }
}

দ্রষ্টব্য : বিবরণ যে কোনো সময় পরিবর্তিত হতে পারে তাই অ্যাপ্লিকেশনগুলি প্রকৃত বর্ণনা পাঠ্যের উপর নির্ভর করবে না।

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

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

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

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

উপরের প্রবাহে, random_number_milliseconds হল 1,000 এর থেকে কম বা সমান মিলিসেকেন্ডের একটি এলোমেলো সংখ্যা। কিছু সমসাময়িক বাস্তবায়নে নির্দিষ্ট লক ত্রুটিগুলি এড়াতে এটি প্রয়োজনীয়। 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(tagmanager):
  """Wrapper to request Google Tag Manager data with exponential backoff.

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

  Args:
    tagmanager: The tagmanager service object

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

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

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