जब मैं एक HTTP सर्वर और उसके क्लाइंट के बीच इंटरफ़ेस साझा करने के तरीके के बारे में पता चला तो मैं स्प्रिंग क्लाउड नेटफ्लिक्स प्रलेखन पढ़ रहा था । वे इस उदाहरण का उपयोग माइक्रोसिस्टर्स के लिए करते हैं, हालांकि इसका कोई कारण नहीं है कि यह जेनेरिक HTTP संचार का विस्तार नहीं कर सकता है:
// 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 सर्वर में बदल देता है) और एक क्लाइंट (Feign @FeignClient
इसे HTTP क्लाइंट उपयोग के लिए सेट करता है)। सर्वर और क्लाइंट क्लास कार्यान्वयन का उपयोग अलग-अलग परियोजनाओं में किया जा सकता है लेकिन फिर भी यह सुनिश्चित करने के लिए एक ही इंटरफ़ेस का उपयोग करते हैं कि प्रकार मेल खाते हैं।
हालांकि, उदाहरण के नीचे वे निम्नलिखित चेतावनी देते हैं:
नोट: आमतौर पर सर्वर और क्लाइंट के बीच इंटरफेस साझा करना उचित नहीं है। यह तंग युग्मन का परिचय देता है, और वास्तव में स्प्रिंग एमवीसी के साथ अपने वर्तमान रूप में काम नहीं करता है (विधि पैरामीटर मैपिंग विरासत में नहीं मिली है)।
ठीक है, इसलिए अभी यह अच्छी तरह से एकीकृत नहीं है ... लेकिन यह हिस्सा कोड को साझा करने और सर्वर और क्लाइंट के बीच युग्मन शुरू करने के खिलाफ चेतावनी के बाद आता है , जो उन्हें लगता है कि अधिक महत्वपूर्ण है। वे ऐसा क्यों सोचते हैं कि इस तरह से इंटरफ़ेस साझा करना इतना बुरा विचार है?
इसके बिना, आप यह गारंटी देने की क्षमता खो देते हैं कि सर्वर और क्लाइंट एक दूसरे को डेटा भेजते हैं जिसे वे दोनों समझ सकते हैं। आप एक क्षेत्र को जोड़ सकते हैं लेकिन दूसरे को नहीं और केवल रनटाइम तक बेमेल को खोज सकते हैं। मेरे दिमाग में, यह युग्मन शुरू नहीं कर रहा है , लेकिन केवल पहले से मौजूद युग्मन का खुलासा कर रहा है। क्या सर्वर को पूरी तरह से स्वतंत्र बनाने की आवश्यकता है ताकि वे यह जान सकें कि उन्हें किस प्रकार का डेटा प्राप्त होगा?