REST এপিআইগুলির সংস্করণ করা হচ্ছে। প্রতিটি এপিআই এর নিজস্ব সংস্করণ রয়েছে


15

ইউআরএলটিতে REST এপিআইয়ের সংস্করণ নির্দিষ্ট করে দেওয়া খুব সাধারণ, বিশেষত পথের শুরুতে, যেমন:

POST /api/v1/accounts
GET /api/v1/accounts/details

যাইহোক, আমি এমন কোনও ডিজাইন দেখিনি যেখানে সংস্করণটি প্রতিটি API এর সাথে সম্পর্কিত associated অন্য কথায়, আমরা পৃথকভাবে প্রতিটি এপিআইয়ের সংস্করণ বজায় রাখি। অর্থাৎ,

POST /api/accounts/v2
GET /api/accounts/details/v3

এই পদ্ধতির ব্যবহার করে আমরা নির্দিষ্ট এপিআইয়ের এপিআই সংস্করণটি বাড়িয়ে দিই যখন ব্রেকিং পরিবর্তন দরকার হয়, পুরো API এর সংস্করণ বাড়ানোর দরকার হয় না।

সাধারণ স্টাইলের পরিবর্তে এই স্টাইলটি ব্যবহার করার ত্রুটিগুলি কী কী?

উত্তর:


13

আপনি যাকে একক আরএসটি এপিআই বলবেন তাকেই কেবল রিস্ট এপিআই'র নির্দিষ্ট সংস্থান বা সংস্থানগুলির সেট বলা যেতে পারে । আপনি এটিকে REST API এর কার্যকারিতা হিসাবেও দেখতে পারেন । যেমন কোনও ধরণের সফ্টওয়্যার, পুরো প্যাকেজটি সংস্করণযুক্ত / আপডেট করা হয়, একক কার্যকারিতা বা সংস্থান নয়।

আপনার প্রশ্নটি সেই প্রসঙ্গে বিবেচনা করবে যেখানে REST এপিআই প্যাকেজের সংস্থানগুলি মডুলার এবং তাই সম্ভাব্যভাবে বিকশিত হয়েছে এবং আলাদাভাবে সংস্করণ করা হয়েছে।

তারপরে, যতদূর আমি দেখতে পাচ্ছি, আপনার প্রস্তাবিত সংস্থার লোকেটার নামকরণের কনভেনশনের মূল বিধানগুলি হ'ল:

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

একটি API তৈরি করার সময়, আপনার প্রধান উদ্দেশ্যগুলির মধ্যে একটি এটি ব্যবহার করা সহজ করে তুলছে ...

আপনি সম্ভবত একটি এইচটিটিপি শিরোনামের সাথে একটি ব্রেকিং পরিবর্তন বা এমনকি REST এপিআই এর সংস্করণ করার আরও ভাল উপায় খুঁজে পেতে পারেন?

এইচটিটিপি শিরোনামের পদ্ধতির সম্পর্কে আরও কিছু জানতে, নীচের অন্যান্য উত্তরগুলি দেখুন এবং: https://www.troyhunt.com/your-api-versioning-is-wrong- which-is/


12

এটি আরও উন্নত পদ্ধতির: আপনার এপিআই এবং শিরোলেখগুলির সাথে সংস্করণ করতে বিষয়বস্তু আলোচনার ব্যবহার করুন:Content-TypeAccept

POST /api/accounts
Accept: application/vnd.my-api.account.v1+json

201 Created
Location: /api/accounts/285728
Content-Type: application/vnd.my-api.account.v1+json
{ ... account data here ... }

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

এটি আপনাকে একই প্রান্তে বিভিন্ন শব্দার্থক (কেবল ভিন্ন সংস্করণ নয়) সহ নতুন ফর্ম্যাটগুলি সমর্থন করতে দেয় । উদাহরণস্বরূপ, অ্যাকাউন্টগুলির একটি তালিকা পোস্ট করার /api/accountsঅর্থ ব্যাচ তৈরির অর্থ হতে পারে এবং এর জন্য আপনাকে আলাদা একটি এপিআই এন্ডপয়েন্ট তৈরি করতে হবে না।


ওএমজি গ্রহণের শিরোনামটি সংস্করণ সংকেতের সবচেয়ে খারাপ পছন্দ হতে হবে। যদি পারেন তবে একটি সংস্করণ শিরোনাম ব্যবহার করুন, ইউআরএল পাথ যদি আপনার অবশ্যই প্রয়োজন (যেমন AWS রাউটিং)
ইভান

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

আপনি যদি ইতিমধ্যে এপিআই অনুরোধগুলির জন্য নো-ক্যাশ ব্যবহার না করেন তবে ভিন্ন প্রতিক্রিয়া শিরোনামটি ব্যবহার করুন! সামগ্রীর ধরণের ইতিমধ্যে একটি অর্থ রয়েছে, এটি আপনার ব্যক্তিগত ব্যবহারের জন্য জোর করে দেওয়া কেবল গ্রাহকদের জন্য জীবনকে কঠিন করে তোলে
ইওয়ান

@ ইভান এই ধরণের vndঅংশ এবং +বাক্য গঠন এর জন্য: এটি প্রকারের বিক্রেতা-নির্দিষ্ট সাব টাইপটি বোঝাতে application/json। বিষয়বস্তুর প্রকারগুলি ঠিক এটির জন্য ডিজাইন করা হয়েছে। আপনার সংস্থান একাধিক ফর্ম্যাটে উপলব্ধ। আপনি ক্লায়েন্টকে কোন ফর্ম্যাটটি চান তা চয়ন করতে বলছেন। অতিরিক্তভাবে, API অনুরোধগুলি স্ট্যান্ডার্ড এইচটিটিপি ক্যাচিং শব্দার্থ ব্যবহার করতে পারে না এমন কোনও কারণ নেই।
জ্যাক

আপনি যদি মায়াপি ভি 2 এ একটি বাগ ঠিক করেন আপনি নতুন মাইম প্রকারটি ফিরিয়ে দিচ্ছেন না।
ইভান

5

মূল কথাটি হ'ল আপনি যদি প্রতিটি শেষ পয়েন্ট আলাদাভাবে সংস্করণ করেন তবে আপনাকে অবশ্যই প্রতিটি প্রান্তপয়েন্ট পৃথকভাবে স্থাপন করতে সক্ষম হতে হবে।

এপিআইগুলির সাধারণত একটি সংস্করণ থাকে কারণ সমস্ত শেষ পয়েন্ট একই কোডবেসে থাকে এবং তাই ভাগ করে নেওয়া নির্ভরতা থাকে এবং একসাথে স্থাপন করা হয়।

আপনি যদি কোনও পরিবর্তন করার সময় সংস্করণটি আপডেট না করে থাকেন কারণ "ওহ আমি বেশ নিশ্চিত যে আমার পরিবর্তনটি তাতে প্রভাব ফেলবে না" ভাল আপনি যখন ভুল করবেন তখন আপনি সমস্যায় পড়বেন।

অতিরিক্তভাবে, আপনি একই সময়ে আপনার API এর v1 এবং v2 উভয়ই রাখতে চাইবেন। এটি সাধারণত প্রতিটি সংস্করণকে পৃথক সার্ভারে স্থাপন এবং ততক্ষণে ট্র্যাফিকের রাউটিংয়ের মাধ্যমে করা হয়।

আপনার যদি কোনও একক এপিআই সংস্করণ না থাকে তবে এটি আরও জটিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.