আমি যখন এইচটিটিপি সার্ভার এবং এর ক্লায়েন্টের মধ্যে একটি ইন্টারফেস ভাগ করার উপায় সম্পর্কে জানতে পারি তখন আমি স্প্রিং ক্লাউড নেটফ্লিক্স ডকুমেন্টেশন পড়ছিলাম । তারা এই উদাহরণটি মাইক্রোসার্ভেসিসের জন্য ব্যবহার করে, যদিও এটি জেনেরিক এইচটিটিপি যোগাযোগের ক্ষেত্রে প্রসারিত করতে পারে না তার কোনও কারণ নেই:
// The shared interface, in a common library
public interface UserService {
@RequestMapping(method = GET, value = "/users/{id}")
User getUser(@PathVariable long id);
}
// The controller, on the server
@RestController
public class UserResource implements UserService {
}
// The same interface used for the client
@FeignClient("users")
public interface UserClient extends UserService {
}
এটি এমন একটি ইন্টারফেসকে সংজ্ঞায়িত করে যা একটি সার্ভার (স্প্রিং @RestController
এটিকে HTTP সার্ভারে রূপান্তর করে) এবং ক্লায়েন্ট উভয় হিসাবে ব্যবহৃত হয় (দ্য ফিগেন @FeignClient
এটি HTTP ক্লায়েন্ট ব্যবহারের জন্য সেট আপ করে)। সার্ভার এবং ক্লায়েন্ট শ্রেণীর প্রয়োগগুলি পৃথক প্রকল্পে ব্যবহার করা যেতে পারে তবে এখনও ধরণের মিল মেলে তা নিশ্চিত করতে একই ইন্টারফেস ব্যবহার করুন।
যাইহোক, উদাহরণের নীচে তারা নিম্নলিখিত সাবধানবাণী রাখে:
দ্রষ্টব্য: সাধারণত কোনও সার্ভার এবং ক্লায়েন্টের মধ্যে একটি ইন্টারফেস ভাগ করে দেওয়া উচিত নয়। এটি আঁটসাঁট মিলনের সাথে পরিচিত হয় এবং স্প্রিং এমভিসির সাথে তার বর্তমান আকারে আসলে কাজ করে না (পদ্ধতি প্যারামিটার ম্যাপিং উত্তরাধিকার সূত্রে প্রাপ্ত হয় না)।
ঠিক আছে, সুতরাং এটি এখনই সুসংহত নয় ... তবে সেই অংশটি কোড ভাগ করে নেওয়ার বিরুদ্ধে সতর্ক করার পরে এবং সার্ভার এবং ক্লায়েন্টের মধ্যে সংযুক্তকরণ প্রবর্তন করার পরে আসে যা তারা মনে করেন যে এটি আরও গুরুত্বপূর্ণ। তারা কেন মনে করে যে কোনও ইন্টারফেসটি এভাবে ভাগ করে নেওয়া এত খারাপ ধারণা?
এটি ছাড়া, আপনি গ্যারান্টি দেওয়ার ক্ষমতা হারাবেন যে সার্ভার এবং ক্লায়েন্ট একে অপরকে ডেটা প্রেরণ করবে যা তারা উভয়ই বুঝতে পারে। আপনি একটিতে একটি ক্ষেত্র যুক্ত করতে পারেন তবে অপরটি নয় এবং কেবল রানটাইম পর্যন্ত মিল খুঁজে পেতে পারেন। আমার মনে, এটি সংযুক্তির পরিচয় দিচ্ছে না , কেবল ইতিমধ্যে বিদ্যমান কাপলিংয়ের প্রকাশ করছে। সার্ভারগুলি কী ধরণের ডেটা গ্রহণ করবে তা তাদের জানানোর প্রয়োজনের চেয়ে সার্ভারগুলি সম্পূর্ণ স্বাধীন করার প্রয়োজনীয়তা কি আরও বেশি?