JAX-RS और स्प्रिंग रेस्ट के बीच अंतर


138

मैं JAX-RS (अच्छी तरह से, शायद JAX-RS सिर्फ कल्पना है और तुलनात्मक सेवाओं के लिए स्प्रिंग ) के बाद से तुलना करने के लिए जर्सी का उपयोग करना चाहिए । मैंने अधिक जानकारी के लिए ऑनलाइन खोज करने की कोशिश की और यह अधिक भ्रमित हो गया। रेस्टफुल एपीआई को विकसित करने के लिए मेरी कंपनी स्प्रिंग एमवीसी का उपयोग कर रही है

भ्रामक हिस्सा यह है कि, JAX-RS का अर्थ है RESTful वेब सेवाओं के लिए जावा एपीआई , वसंत में मैं RESTful वेब सेवाओं को विकसित करने के लिए जावा का उपयोग कर रहा हूं, इसलिए मुझे वास्तव में अंतर नहीं मिलता है। क्या स्प्रिंग JAX-RS विनिर्देशों का पालन करता है?

मैं अब तक क्या जानता हूं:

  1. JAX-RS एक खाका / विनिर्देश है, इसमें कार्यान्वयन के रूप में जर्सी, रिस्टेसी आदि हैं।

@ CássioMazzochiMolin आपके उत्तर के लिए धन्यवाद, मैं इसे थोड़ी देर में स्वीकार करूंगा, एक और सवाल, आपने उल्लेख किया है कि स्प्रिंग फ्रेमवर्क एक JAX-RS कार्यान्वयन नहीं है, कौन से विनिर्देशन स्प्रिंग निम्नलिखित है? धन्यवाद
हेड्स

3
यह किसी विशेष विनिर्देश को लागू नहीं करता है। यह सिर्फ बातें करने का स्प्रिंग तरीका है। अन्य क्षमताओं को spring-webmvcमॉड्यूल द्वारा प्रदान किया जाता है जो स्प्रिंग के मॉडल-व्यू-कंट्रोलर को भी प्रदान करता है।
कैसियोमोलिन

जवाबों:


150

JAX-आरएस

JAX-RS जावा में REST वेब सेवाओं को लागू करने के लिए एक विनिर्देश है , जिसे वर्तमान में JSR-370 द्वारा परिभाषित किया गया है । यह जावा ईई प्रौद्योगिकियों का हिस्सा है , जिसे वर्तमान में जेएसआर 366 द्वारा परिभाषित किया गया है ।

जर्सी ( ग्लासफिश और पयारा के साथ भेज दिया गया) JAX-RS संदर्भ कार्यान्वयन है, हालांकि RESTEasy (JBoss EAP और WildFly के साथ भेज दिया गया) और Apache CXF (TomEE और WebSphere के साथ भेज दिया गया ) जैसे अन्य कार्यान्वयन हैं ।

स्प्रिंग फ्रेमवर्क

स्प्रिंग फ्रेमवर्क एक है पूर्ण रूपरेखा है कि आप जावा उद्यम अनुप्रयोगों को बनाने के लिए अनुमति देता है। REST क्षमताएं स्प्रिंग MVC मॉड्यूल ( मॉडल-व्यू-कंट्रोलर क्षमताओं को प्रदान करने वाला समान मॉड्यूल) द्वारा प्रदान की जाती हैं । यह JAX-RS कार्यान्वयन नहीं है और इसे JAX-RS मानक के स्प्रिंग विकल्प के रूप में देखा जा सकता है।

स्प्रिंग इकोसिस्टम उद्यम अनुप्रयोगों के निर्माण, दृढ़ता, सुरक्षा, सामाजिक नेटवर्क के साथ एकीकरण, बैच प्रोसेसिंग आदि को कवर करने के लिए कई प्रकार की परियोजनाएं भी प्रदान करता है ।

उदाहरण

JAX-RS API का उपयोग करते हुए निम्नलिखित संसाधन नियंत्रक पर विचार करें:

@Path("/greetings")
public class JaxRsController {

    @GET
    @Path("/{name}")
    @Produces(MediaType.TEXT_PLAIN)
    public Response greeting(@PathParam("name") String name) {

        String greeting = "Hello " + name;
        return Response.ok(greeting).build();
    }
}

स्प्रिंग एमवीसी एपीआई का उपयोग करते हुए समतुल्य कार्यान्वयन होगा:

@RestController
@RequestMapping("/greetings")
public class SpringRestController {

    @RequestMapping(method = RequestMethod.GET,
                    value = "/{name}", 
                    produces = MediaType.TEXT_PLAIN_VALUE)
    public ResponseEntity<?> greeting(@PathVariable String name) {

        String greeting = "Hello " + name;
        return new ResponseEntity<>(greeting, HttpStatus.OK);
    }
}

स्प्रिंग बूट और जर्सी का उपयोग करना

स्प्रिंग बूट spring-boot-starter-jerseyमॉड्यूल प्रदान करता है जो आपको स्प्रिंग MVC के बजाय REST के समापन बिंदु के लिए JAX-RS प्रोग्रामिंग मॉडल का उपयोग करने की अनुमति देता है। यह जर्सी 2.x के साथ काफी अच्छी तरह से काम करता है।

जर्सी 2.x और स्प्रिंग बूट 1.4.x के साथ एक वेब एप्लिकेशन बनाने के एक पूर्ण उदाहरण के लिए, इस उत्तर को देखें ।


इसलिए यदि हम स्प्रिंग MVC का उपयोग करते हैं और ग्लासफिश / पयारा में डिपो करते हैं, तो क्या हमें सर्वर में jax-rs कार्यान्वयन को अक्षम करने की आवश्यकता है?
प्रदीप_ईवोल

क्या यह लेख 4 वसंत के साथ सच है dzone.com/articles/… ? बसंत + जर्सी (JAX-RS) की तुलना में ResT वेब सेवाएं बनाने के लिए स्प्रिंग वेब बेहतर है?
tgkprog

58

एनोटेशन अंतर

(2018 के अनुसार) स्प्रिंग एमवीसी ने JAX-RS एनोटेशन को मानकीकृत नहीं किया है, क्योंकि इसका समाधान JAX-RS से पूर्ववर्ती है। यहाँ समकक्ष हैं:

यहाँ छवि विवरण दर्ज करें

https://stormpath.com/blog/jax-rs-vs-spring-rest-endpoints

यदि आप गैर-मानकीकृत एपीआई का उपयोग कर रहे हैं, तो आपको उम्मीद करनी चाहिए कि वे कुछ वर्षों में एक नए प्रयोगात्मक एपीआई के द्वारा पदावनत हो सकते हैं और संभवतः सुपरसीड किए जाएंगे। पिछड़ी संगतता के लिए बहुत कम जवाबदेही है (जैसे जब एक नया JDK संस्करण जारी किया जाता है)।


बहुत बहुत धन्यवाद, यह बहुत बढ़िया है
बेजंड

26

मैंने जर्सी रेस्ट, स्प्रिंग रेस्ट और जर्सी रेस्ट दोनों स्प्रिंग के साथ काम किया। ये दोनों अच्छे क्रियान्वयन के साथ बहुत समृद्ध रूपरेखा हैं। मेरा सुझाव है कि यदि आप अन्य स्प्रिंग सेवाओं जैसे ORM, स्प्रिंग सिक्योरिटी और DI आदि का उपयोग कर रहे हैं तो स्प्रिंग रेस्ट के साथ जाना बेहतर है। दोनों ही स्प्रिंग लाइब्रेरी हैं, इसलिए मुझे कोड और निर्भरता को प्रबंधित करना थोड़ा आसान लगता है

JAX-RS पेशेवरों:

  • JSR मानक सर्वलेट कंटेनर के बिना चलाया जा सकता है (ख़ाकी, सरल, ...)
  • उत्पादन-तैयार कार्यान्वयन (जर्सी, cxf, resteasy, restlet, ...) केवल REST अनुप्रयोगों के लिए डिज़ाइन किया गया

स्प्रिंग MVC के पेशेवरों:

  • "पूर्ण" स्टैक प्रदान करें, न कि केवल REST सुविधाएं

  • निर्भरता इंजेक्शन / एओपी / लेनदेन

  • प्लग करने योग्य दृश्य टेम्प्लेट (JSP, फ़्रीमार्कर, वेलोसिटी, ...)

आप निम्न लिंक पर अधिक जाँच कर सकते हैं

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. JAX-RS / जर्सी का उपयोग क्यों करें?

4
हालांकि, JAX-RS का उपयोग स्प्रिंग (DI, AOP, ...) के साथ भी किया जा सकता है।
बहरीन

5

JAX-RS विनिर्देश है और जर्सी आदि इसके कार्यान्वयन हैं। लोग रेस्टफुल वेब सेवाओं को बनाने के लिए स्प्रिंग का उपयोग करते हैं क्योंकि वसंत के साथ-साथ आराम से कार्यान्वयन हाइबरनेट एकीकरण जैसे सामान प्रदान करता है और आईओसी और एस्पेक्ट ओरिएंटेड प्रोग्रामिंग जैसे सामान भी प्रदान करता है।

जैसे कि अगर हम अपने कार्यान्वयन के लिए जर्सी का उपयोग करते हैं, तो समस्या यह होगी कि डेटा को कुछ ओआरएम तकनीकों का उपयोग करके पीछे के छोर से प्राप्त करना होगा और हमें उसी के लिए बॉयलरप्लेट कोड लिखना होगा।

यही कारण है कि लोग और यहां तक ​​कि उद्यम भी वसंत का उपयोग करते हैं, बाकी कार्यान्वयन के साथ ही यह वसंत सुविधाएं भी प्रदान करता है। और अब नवीनतम स्प्रिंग बूट कार्यान्वयन का उपयोग करके हम बहुत सारे कॉन्फ़िगरेशन के बिना बहुत तेजी से विकास शुरू कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.