সংস্করণ করা

অ্যাড ম্যানেজার এপিআই-এর নামযুক্ত মেজর ভার্সন রিলিজ এবং বর্তমান মেজর ভার্সনের সাথে ব্যাকওয়ার্ড কম্প্যাটিবল ইন-প্লেস রিলিজ উভয়ই রয়েছে।

কোনো মেজর ভার্সনের (যেমন v1) মধ্যে যেকোনো সময়ে সার্ভিস, মেথড এবং ফিল্ডগুলোকে ডেপ্রিকেটেড হিসেবে চিহ্নিত করা যেতে পারে, তবে সেই মেজর ভার্সনটি বাতিল না হওয়া পর্যন্ত সেগুলোর সাপোর্ট অব্যাহত থাকবে।

প্রধান সংস্করণ প্রকাশ

মেজর ভার্সন রিলিজ বলতে এমন একটি রিলিজকে বোঝায়, যেখানে পূর্ববর্তী সংস্করণের সাথে অসামঞ্জস্যপূর্ণ এপিআই (API) পরিবর্তন আনা হয়। এই রিলিজগুলোর নামকরণ করা হবে এবং এগুলোর এপিআই এন্ডপয়েন্টগুলোও ভিন্ন হবে। পূর্ববর্তী মেজর ভার্সনগুলো একটি মাইগ্রেশন সময়কাল পর্যন্ত সমর্থিত থাকে।

অ্যাড ম্যানেজার এপিআই-এর প্রধান সংস্করণগুলো প্রকাশের কোনো নিয়মিত সময়সূচী নেই। নতুন প্রধান সংস্করণগুলো শুধুমাত্র প্রয়োজন হলেই প্রকাশ করা হবে।

ইন-প্লেস রিলিজ

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

পশ্চাৎ সামঞ্জস্যতা

একটি প্রধান সংস্করণের মধ্যেকার পরিবর্তনগুলোর জন্য পশ্চাৎ সামঞ্জস্যতা বজায় রাখা হয়। সামঞ্জস্যতার সংজ্ঞা হলো:

  1. সোর্স সামঞ্জস্যতা: পূর্ববর্তী রিলিজের জন্য লেখা কোড নতুন রিলিজের জন্য কম্পাইল হয় এবং ক্লায়েন্ট লাইব্রেরির নতুন সংস্করণের সাথে সফলভাবে চলে।

  2. ওয়্যার কম্প্যাটিবিলিটি: পূর্ববর্তী রিলিজের জন্য লেখা কোড নতুন সার্ভারের সাথে সঠিকভাবে যোগাযোগ করে। অন্য কথায়, শুধু ইনপুট এবং আউটপুটই সামঞ্জস্যপূর্ণ থাকে না, বরং সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশনের প্রত্যাশাগুলোও মিলে যায়।

  3. শব্দার্থগত সামঞ্জস্য: পূর্ববর্তী সংস্করণের জন্য লেখা কোড বেশিরভাগ যুক্তিবাদী ডেভেলপারদের প্রত্যাশা অনুযায়ী সুবিধা পেতে থাকে।

নিম্নলিখিত সারণিগুলিতে API পরিবর্তনের প্রকারভেদ এবং সেগুলি ব্যাকওয়ার্ড কম্প্যাটিবল কিনা তা তালিকাভুক্ত করা হয়েছে।

পরিষেবা

পরিবর্তনের ধরণ পশ্চাৎ সামঞ্জস্যপূর্ণ
একটি নতুন পরিষেবা যোগ করুন হ্যাঁ
একটি পরিষেবা সরান না

পদ্ধতি

পরিবর্তনের ধরণ পশ্চাৎ সামঞ্জস্যপূর্ণ
একটি নতুন পদ্ধতি যোগ করুন হ্যাঁ
একটি পদ্ধতি অপসারণ করুন না
একটি মেথডের অনুরোধ বা প্রতিক্রিয়ার ধরণ পরিবর্তন করুন না

বস্তু

পরিবর্তনের ধরণ পশ্চাৎ সামঞ্জস্যপূর্ণ
একটি আবশ্যক ক্ষেত্র যোগ করুন না
একটি ঐচ্ছিক ক্ষেত্র যোগ করুন হ্যাঁ
একটি ফিল্ডকে সাবমেসেজের ভিতরে বা বাইরে সরানো না
একটি ফিল্ডকে আবশ্যক থেকে ঐচ্ছিক-এ পরিবর্তন করুন হ্যাঁ
একটি ফিল্ডকে ঐচ্ছিক থেকে আবশ্যকীয়তে পরিবর্তন করুন না
একটি অপরিবর্তনীয় সীমাবদ্ধতা অপসারণ করুন হ্যাঁ
একটি অপরিবর্তনীয় সীমাবদ্ধতা যোগ করুন না

গণনা

পরিবর্তনের ধরণ পশ্চাৎ সামঞ্জস্যপূর্ণ
একটি enum মান যোগ করুন হ্যাঁ
একটি এনাম মান অপসারণ করুন না

অপ্রচলিত ক্ষেত্রের আচরণ

প্রতিস্থাপন ক্ষেত্র

যেসব ফিল্ডের প্রতিস্থাপন রয়েছে, সম্ভব হলে উভয় ফিল্ডই পূরণ করা হবে। আপডেট করার সময়, যেকোনো একটি ফিল্ড সেট করা যেতে পারে। একটি আপডেট অনুরোধে উভয় ফিল্ড অন্তর্ভুক্ত করলে একটি INVALID_ARGUMENT ত্রুটি দেখা দেয়।

নিম্নলিখিত পরিকল্পনাটি বিবেচনা করুন:

{
  // The cost of this Foo in micros.
  // Deprecated: Use `cost` instead.
  "costMicros": number,

  // The cost of this Foo.
  "cost": {
    object (Money)
  }
}

একটি রিড রেসপন্স উভয় ফিল্ডকেই সমতুল্য মান দিয়ে পূরণ করে:

{
  "costMicros": 1250000,
  "cost": {
    "currencyCode": "USD",
    "units": "1",
    "nanos": 250000000
  }
}

আপডেট অনুরোধে যেকোনো একটি মান সেট করা যায়। উভয় ফিল্ড অন্তর্ভুক্ত করলে একটি INVALID_ARGUMENT ত্রুটি দেখা দেয়:

কস্টমাইক্রোস

// Update payload
{
  "costMicros": 1500000
}

// Response payload
{
  "costMicros": 1500000,
  "cost": {
    "currencyCode": "USD",
    "units": "1",
    "nanos": 500000000
  }
}

খরচ

// Update payload
{
  "cost": {
    "currencyCode": "USD",
    "units": "1",
    "nanos": 500000000
  }
}

// Response payload
{
  "costMicros": 1500000,
  "cost": {
    "currencyCode": "USD",
    "units": "1",
    "nanos": 500000000
  }
}

উভয়

// Update payload
{
  "costMicros": 1250000,
  "cost": {
    "currencyCode": "USD",
    "units": "1",
    "nanos": 500000000
  }
}

// Response payload
{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "field": "costMicros",
            "description": "Cannot update both costMicros and cost."
          }
        ]
      }
    ]
  }
}

বন্ধ হয়ে যাওয়া বৈশিষ্ট্য

যদি কোনো পণ্যের বৈশিষ্ট্য বন্ধ করে দেওয়া হয়, তাহলে সংশ্লিষ্ট ফিল্ডগুলিকে অপ্রচলিত (deprecated) হিসেবে চিহ্নিত করা হবে এবং একটি অর্থগতভাবে উপযুক্ত ডিফল্ট মান ফেরত দিতে পারে। আপডেটগুলি উপেক্ষা করা যেতে পারে।

{
  // The salesperson split amount in micros.
  // Deprecated: The Sales Management feature has been deprecated. This field
  // will always be `0`.
  "salespersonSplitMicros": number,
}