এটি একটি ভাল এবং একটি জটিল প্রশ্ন। ইউআরআই ডিজাইনের বিষয় একই সাথে একটি আরএসটি এপিআইয়ের সর্বাধিক বিশিষ্ট অংশ এবং অতএব, সেই এপিআইর ব্যবহারকারীর প্রতি সম্ভাব্য দীর্ঘমেয়াদী প্রতিশ্রুতি ।
কোনও প্রয়োগের বিবর্তন এবং কিছুটা হলেও, এর এপিআই জীবনের সত্য এবং এটি প্রোগ্রামিং ভাষার মতো একটি আপাতদৃষ্টিতে জটিল পণ্যটির বিবর্তনের সাথেও সমান, ইউআরআই ডিজাইনের কম প্রাকৃতিক বাধা থাকতে হবে এবং এটি সংরক্ষণ করা উচিত সময়ের সাথে । অ্যাপ্লিকেশন এবং এপিআই এর জীবনকাল যত দীর্ঘ হবে, অ্যাপ্লিকেশন এবং এপিআই এর ব্যবহারকারীদের প্রতি দায়বদ্ধতা তত বেশি।
অন্যদিকে, জীবনের আরেকটি সত্য হ'ল এপিআইয়ের মাধ্যমে যে সমস্ত সংস্থান এবং তার দিকগুলি গ্রাস করা হবে তা পূর্বেই ধারণা করা শক্ত। ভাগ্যক্রমে, পুরো এপিআই ডিজাইন করার প্রয়োজন নেই যা অ্যাপোক্যালপস পর্যন্ত ব্যবহৃত হবে । সমস্ত সংস্থান শেষ পয়েন্ট এবং প্রতিটি সংস্থান এবং সংস্থান উদাহরণের ঠিকানা স্কিম সঠিকভাবে সংজ্ঞায়িত করতে এটি যথেষ্ট।
সময়ের সাথে সাথে আপনার প্রতিটি নির্দিষ্ট সংস্থানটিতে নতুন সংস্থান এবং নতুন বৈশিষ্ট্য যুক্ত করার প্রয়োজন হতে পারে, তবে এপিআই ব্যবহারকারীরা কোনও নির্দিষ্ট সংস্থান অ্যাক্সেস করার জন্য যে পদ্ধতি অনুসরণ করে তা কোনও বার রিসোর্স অ্যাড্রেসিং স্কিমটি সর্বজনীন হয়ে ওঠে এবং তাই চূড়ান্ত হয়ে যায় change
এই পদ্ধতিটি HTTP ক্রিয়া শব্দার্থবিজ্ঞানের ক্ষেত্রে প্রযোজ্য (উদাহরণস্বরূপ PUT সর্বদা আপডেট / প্রতিস্থাপন করা উচিত) এবং HTTP স্থিতি কোডগুলি যা পূর্ববর্তী API সংস্করণগুলিতে সমর্থিত (তাদের কাজ চালিয়ে যাওয়া উচিত যাতে মানবিক হস্তক্ষেপ ছাড়াই কাজ করা এপিআই ক্লায়েন্টরা কাজ চালিয়ে যেতে সক্ষম হয়) সে রকমই).
তদুপরি, ইউআরআই-তে এপিআই সংস্করণ এম্বেড করার ফলে অ্যাপ্লিকেশন স্টেটের ইঞ্জিন হিসাবে হাইপারমিডিয়া ধারণাটি ব্যাহত হবে (রায় টি। ফিল্ডিংস পিএইচডি গবেষণামূলক বিবরণীতে) এমন একটি সংস্থান ঠিকানা / ইউআরআই রয়েছে যা সময়ের সাথে সাথে পরিবর্তিত হবে, আমি সেই এপিআই শেষ করবো সংস্করণগুলিকে দীর্ঘ সময় ধরে রিসোর্স ইউআরআইতে রাখা উচিত নয় অর্থাত্ এপিআই ব্যবহারকারীরা যে রিসোর্স ইউআরআইগুলিকে নির্ভর করতে পারে সেগুলি পারমলিংক হওয়া উচিত ।
অবশ্যই, বেস ইউআরআইতে এপিআই সংস্করণ এম্বেড করা সম্ভব তবে যুক্তিসঙ্গত এবং সীমাবদ্ধ ব্যবহারের জন্য যেমন কোনও এপিআই ক্লায়েন্টকে ডিবাগ করা যেমন নতুন এপিআই সংস্করণে কাজ করে এটি সম্ভব। এই জাতীয় সংস্করণযুক্ত API গুলি সময়-সীমাবদ্ধ হওয়া উচিত এবং কেবলমাত্র এপিআই ব্যবহারকারীদের (বদ্ধ বেতাসের মতো) সীমাবদ্ধ গোষ্ঠীর জন্য উপলব্ধ। অন্যথায়, আপনি নিজেকে প্রতিশ্রুতিবদ্ধ যেখানে আপনার উচিত হবে না।
এপিআই সংস্করণগুলির মেইনপেনের তারিখ রয়েছে তার রক্ষণাবেক্ষণ সংক্রান্ত বেশ কয়েকটি চিন্তাভাবনা। ওয়েব পরিষেবাদি (জাভা,। নেট, পিএইচপি, পার্ল, রেলস ইত্যাদি) প্রয়োগ করার জন্য সাধারণত ব্যবহৃত সমস্ত প্রোগ্রামিং প্ল্যাটফর্ম / ভাষাগুলি কোনও বেস ইউআরআই-তে ওয়েব সার্ভিস এন্ড-পয়েন্ট (গুলি) সহজেই বাঁধার অনুমতি দেয়। এই উপায়টি বিভিন্ন এপিআই সংস্করণ জুড়ে পৃথক পৃথক ফাইল / শ্রেণি / পদ্ধতি সংগ্রহ এবং সংগ্রহ করা সহজ ।
পিআইভি পিআইপি ব্যবহারকারীদের কাছ থেকে, নির্দিষ্ট এপিআই সংস্করণটির সাথে কাজ করা এবং বাঁধাই করা আরও সহজ যখন এটি সুস্পষ্ট তবে কেবল সীমিত সময়ের জন্য, অর্থাত্ বিকাশের সময়।
এপিআই রক্ষণকারীর পিওভি থেকে, সোর্স কন্ট্রোল সিস্টেমগুলি (উত্স কোড) সংস্করণকরণের ক্ষুদ্রতম ইউনিট হিসাবে মূলত ফাইলগুলিতে কাজ করে এমন সমান্তরালে বিভিন্ন এপিআই সংস্করণগুলি বজায় রাখা আরও সহজ।
তবে, ইউআরআই-তে স্পষ্টভাবে দৃশ্যমান এপিআই সংস্করণগুলির সাথে একটি সতর্কতা অবলম্বন করা যেতে পারে: ইউআরআই নকশায় এপিআই ইতিহাস দৃশ্যমান / স্পষ্ট হয়ে ওঠে এবং তাই সময়ের সাথে সাথে পরিবর্তনগুলি ঝুঁকির মধ্যে পড়ে যা আরআরইএসটির নির্দেশিকাগুলির বিপরীতে থাকে। আমি রাজী!
এই যুক্তিসঙ্গত আপত্তির চারপাশে যাওয়ার উপায়টি হ'ল ভার্সনবিহীন এপিআই বেস ইউআরআই এর আওতায় সর্বশেষতম এপিআই সংস্করণটি প্রয়োগ করা। এই ক্ষেত্রে, এপিআই ক্লায়েন্ট বিকাশকারীরা যেকোনটি বেছে নিতে পারেন:
সর্বশেষতমটির বিরুদ্ধে বিকাশ করুন (অ্যাপ্লিকেশনটিকে এটির শেষ রক্ষণাবেক্ষণের পরিবর্তিত এপিআই ক্লায়েন্টকে ভেঙে ফেলতে পারে এমন এপিআই পরিবর্তনগুলি থেকে রক্ষা করার জন্য তাদের প্রতিশ্রুতিবদ্ধ )।
এপিআই-র একটি নির্দিষ্ট সংস্করণে আবদ্ধ (যা স্পষ্ট হয়ে ওঠে) তবে কেবল সীমিত সময়ের জন্য
উদাহরণস্বরূপ, যদি API v3.0 সর্বশেষতম এপিআই সংস্করণ হয় তবে নিম্নলিখিত দুটিটি অবশ্যই এলিয়াস হওয়া উচিত (যেমন সমস্ত API অনুরোধের সাথে অভিন্ন আচরণ করুন):
http: // শনজিলা / এপিআই / গ্রাহকরা / 1234
http: // শনজিলা / এপিআই / ভি 3.0 / গ্রাহক / 1234
http: // শনজিলা / এপিআই / ভি 3 / গ্রাহক / 1234
এছাড়াও, যে এপিআই ক্লায়েন্টরা এখনও পুরানো এপিআইয়ের দিকে ইঙ্গিত করার চেষ্টা করে তাদের সর্বশেষ পূর্ববর্তী এপিআই সংস্করণটি ব্যবহার করতে জানানো উচিত, যদি তারা যে এপিআই সংস্করণটি ব্যবহার করছেন তারা অপ্রচলিত বা আর সমর্থন না করে থাকে । সুতরাং এগুলির মতো কোনও অপ্রচলিত ইউআরআই অ্যাক্সেস করা:
http: // শনজিলা / এপিআই / ভি 2.2 / গ্রাহক / 1234
http: // শনজিলা / এপিআই /ভি 2.0 / গ্রাহক / 1234
http: // শনজিলা / এপিআই / ভি 2 / গ্রাহক / 1234
http: // শনজিলা / এপিআই / ভি 1.1 / গ্রাহক / 1234
http: // শনজিলা / এপিআই / ভি 1 / গ্রাহক / 1234
এইচটিটিপি শিরোলেখের সাথে একত্রে ব্যবহৃত পুনঃনির্দেশ নির্দেশিত 30x এইচটিটিপি স্থিতি কোডগুলির মধ্যে কোনওটি ফিরিয়ে দেওয়া উচিত যা এই ইউটিও হিসাবেLocation
রয়ে গেছে এমন উত্সের যথাযথ সংস্করণে পুনঃনির্দেশ করে:
HTTP: // shonzilla / API / গ্রাহকদের / 1234
কমপক্ষে দুটি পুনর্নির্দেশ HTTP স্থিতি কোড রয়েছে যা এপিআই সংস্করণ সংস্করণের জন্য উপযুক্ত:
301 স্থায়ীভাবে নির্দেশিত হয়েছে যে অনুরোধ করা ইউআরআই সহ সংস্থানটি স্থায়ীভাবে অন্য ইউআরআইতে স্থানান্তরিত হয় (যা এপিআই সংস্করণ তথ্য ধারণ করে না এমন একটি সংস্থান উদাহরণ পারমলিংক হওয়া উচিত)। এই স্থিতি কোডটি একটি অপ্রচলিত / অসমর্থিত এপিআই সংস্করণ নির্দেশ করতে ব্যবহার করা যেতে পারে, এপিআই ক্লায়েন্টকে জানায় যে কোনও সংস্করণযুক্ত ইউআরআই রিসোর্স পারমালিঙ্ক দ্বারা প্রতিস্থাপিত হয়েছে ।
302 অনুরোধ করা সংস্থানটি অস্থায়ীভাবে অন্য কোনও স্থানে অবস্থিত এমনটি নির্দেশ করে পাওয়া গেছে , যখন অনুরোধ করা ইউআরআই এখনও সমর্থিত হতে পারে। এই স্থিতি কোডটি কার্যকর হতে পারে যখন সংস্করণ-কম ইউআরআইগুলি অস্থায়ীভাবে অনুপলব্ধ থাকে এবং পুনর্নির্দেশের ঠিকানাটি ব্যবহার করে একটি অনুরোধ পুনরাবৃত্তি করা উচিত (উদাহরণস্বরূপ এপিআই সংস্করণ এম্বেডযুক্ত ইউআরআইয়ের দিকে নির্দেশ করা) এবং আমরা ক্লায়েন্টদের এটি ব্যবহার চালিয়ে যেতে বলি (অর্থাত্ পার্মালিনক্স)।
অন্যান্য পরিস্থিতিতে HTTP 1.1 নির্দিষ্টকরণের পুনর্নির্দেশ 3xx অধ্যায় পাওয়া যাবে