এই উত্তরের মূল ফর্মটি বন্যভাবে আলাদা এবং এটি এখানে পাওয়া যাবে । একটি বিড়ালকে চামড়ার একাধিক উপায় ছাড়াও প্রমাণ।
আমি নেমস্পেসগুলি ব্যবহার করতে এবং 302 এর পূর্বনির্ধারিত পরিবর্তে 301 পুনঃনির্দেশগুলি ব্যবহার করার জন্য উত্তরটি আপডেট করেছি those পিকসেল্ট্রিক্স এবং বো জিনেসকে ধন্যবাদ এই বিষয়গুলির জন্য অনুরোধ করার জন্য।
আপনি একটি পরতে চাইবেন সত্যিই শক্তিশালী শিরস্ত্রাণ কারণ এই যাচ্ছে আপনার মন গাট্টা ।
রেল 3 রাউটিং এপিআই সুপার দুষ্ট। আপনার এপিআই-র জন্য রুটগুলি লিখতে, উপরে আপনার প্রয়োজনীয়তা অনুসারে, আপনার কেবল এটির প্রয়োজন:
namespace :api do
namespace :v1 do
resources :users
end
namespace :v2 do
resources :users
end
match 'v:api/*path', :to => redirect("/api/v2/%{path}")
match '*path', :to => redirect("/api/v2/%{path}")
end
এই বিষয়টির পরে যদি আপনার মন এখনও অক্ষত থাকে তবে আমাকে ব্যাখ্যা করুন।
প্রথমে আমরা কল করি namespaceযা আপনি যখন নির্দিষ্ট নাম এবং নির্দিষ্ট মডিউলের অনুরূপ নামকরণ করা পথের একটি গোছা চান তখন এর জন্য খুব কার্যকর। এক্ষেত্রে আমরা চাইব যে আমাদের ব্লকের ভিতরে থাকা সমস্ত namespaceরুটগুলিকে Apiমডিউলটির মধ্যে থাকা নিয়ন্ত্রকদের কাছে স্কোপ করা হবে এবং এই রুটের অভ্যন্তরের পাথগুলিতে সমস্ত অনুরোধগুলি উপসর্গযুক্ত করা হবে api। অনুরোধ যেমন /api/v2/users, ইয়া জানেন?
নেমস্পেসের অভ্যন্তরে, আমরা আরও দুটি নাম স্থান (ওহো!) সংজ্ঞায়িত করি। এই সময় আমরা "v1 এ" নামস্থান সংজ্ঞা করছি, তাই কন্ট্রোলার এখানে সব রুটে ভিতরে হতে হবে V1ভিতরে মডিউল Apiমডিউল: Api::V1। resources :usersএই রুটের ভিতরে সংজ্ঞা দিয়ে, নিয়ামকটি এখানে অবস্থিত হবে Api::V1::UsersController। এটি সংস্করণ ১, এবং আপনি অনুরোধ করে সেখানে পৌঁছে যান /api/v1/users।
সংস্করণ 2 শুধুমাত্র একটি হল অতি ক্ষুদ্র একটু ভিন্ন। নিয়ন্ত্রকটি এটিতে উপস্থিত হওয়ার পরিবর্তে Api::V1::UsersControllerএটি এখন Api::V2::UsersController। আপনি অনুরোধ করে সেখানে পাবেন /api/v2/users।
এর পরে, একটি matchব্যবহার করা হয়। এটি এমন সমস্ত API রুটের সাথে মিলবে যা এই জাতীয় জিনিসগুলিতে যায় /api/v3/users।
এই অংশটি আমার সন্ধান করতে হবে। :to =>বিকল্প আপনাকে তা নির্দিষ্ট করার যে একটি নির্দিষ্ট অনুরোধ অন্য কোথাও আপনাকে পুনঃনির্দেশিত করা উচিত দেয় - আমি জানতাম যে কত - কিন্তু আমি কিভাবে এটা অন্য কোথাও পুনর্চালনা এবং এটি সঙ্গে বরাবর আসল অনুরোধটি এক টুকরা মধ্যে পাস পেতে জানেন না ।
এটি করার জন্য, আমরা redirectপদ্ধতিটি কল করি এবং এটি একটি বিশেষ-ইন্টারপোল্টেড %{path}প্যারামিটার সহ একটি স্ট্রিং পাস করি । যখন এই অনুরোধটি এই চূড়ান্ত সাথে মেলে তখন matchএটি pathপ্যারামিটারটিকে %{path}স্ট্রিংয়ের ভিতরে অবস্থিত করে এবং ব্যবহারকারীকে তাদের যেখানে যেতে হবে সেখানে পুনর্নির্দেশ করবে।
অবশেষে, আমরা matchপূর্বনির্ধারিত বাকী সমস্ত পাথগুলি রুট করতে /apiএবং এগুলিতে পুনঃনির্দেশ করার জন্য অন্যটি ব্যবহার করি /api/v2/%{path}। এর অর্থ হল অনুরোধগুলি যেমন /api/usersযাবে /api/v2/users।
আমি জিনিসটা করতে পারেনি কিভাবে পেতে /api/asdf/usersমেলে, কারণ আপনি কিভাবে নির্ধারণ যে যদি একটি অনুরোধ হতে অনুমিত হয় /api/<resource>/<identifier>বা /api/<version>/<resource>?
যাইহোক, এটি গবেষণা মজাদার ছিল এবং আমি আশা করি এটি আপনাকে সহায়তা করবে!