JAX-RS / जर्सी का उपयोग क्यों करें?


84

क्षमा करें, यह प्रश्न मूर्खतापूर्ण लगता है, लेकिन जर्सी का उपयोग करके मेरी कुछ RESTful सेवाओं को विकसित करने के बाद, मैंने खुद से सवाल पूछा - यदि REST सिर्फ एक वास्तुकला है, और SOAP जैसा कोई प्रोटोकॉल नहीं है, तो हमें JAX-RS जैसे विनिर्देश की आवश्यकता क्यों है?

मैं वास्तव में "HTTP पर सर्वलेट्स और रेस्टफुल सेवाओं के बीच अंतर क्या है" जैसे सवालों के लिए गुगली कर रहा हूं और मुझे समुदाय के जवाबों को समेटना है:

  1. रैस्टफुल सर्विस डेवलपमेंट (जर्सी पर) एक आर्किटेक्चर है, जो स्वाभाविक रूप से सर्वलेट्स का उपयोग करता है।
  2. जर्सी जैसे JAX-RS अनुरूप उपकरण डेवलपर्स को मदद करते हुए XML / JSON डेटा के आसान मार्शलिंग-अनमरस्लिंग प्रदान करते हैं।
  3. REST हमें ऐसे फैशन में GET / POST / PUT / DELETE का उपयोग करने में मदद करता है जो सामान्य सर्वलेट्स की तुलना में कहीं अधिक कुशल है।

इन उत्तरों के अनुसार, मुझे लगता है कि अगर मैं एक सर्वलेट लिखता हूं जो JAXB (स्वचालित क्रमांकन से निपटने के लिए) का उपयोग करता है, और मैं कुशलतापूर्वक अपने सर्वलेट कोड में GET / POST / PUT / DELETE का उपयोग करता हूं, तो मैं जर्सी जैसे उपकरण का उपयोग नहीं करता, और इसलिए JAX-RS

मुझे पता है कि मैं इस कथन को गलत तरीके से पारित कर रहा हूं, कृपया मुझे सुधारें।

PS: यह संदेह वास्तव में तब आया जब मुझे PHP में कुछ RESTful सेवाओं को विकसित करना पड़ा। कुछ RESTful PHP कोड के माध्यम से जाने के बाद, मुझे एहसास हुआ कि वे XML / JSON से निपटने के लिए कुछ सहायक विधियों के साथ बस एक ही पुरानी PHP स्क्रिप्ट हैं।


आपके सभी जवाबों के लिए शुक्रिया। लेकिन क्या कोई मेरी पहली बात का जवाब दे सकता है? हमें "आर्किटेक्चर" के लिए विनिर्देश की आवश्यकता क्यों है ... शायद कोई मुझे सिर्फ किसी अन्य वास्तुकला की ओर इशारा कर सकता है जो एक औपचारिक कल्पना प्रदान करता है?
विनऑरविन

क्या आप सादगी (कोड की कुछ पंक्तियों) और पोर्टेबिलिटी (ग्लासफिश, वेबलॉजिक, वेबस्फेयर, जेबॉस, आदि के लिए तैनात) से अधिक कारण की तलाश कर रहे हैं? आप निचले स्तर के विनिर्देशों जैसे कि सर्वलेट्स / JAXP / JDBC का उपयोग करके एक RESTful सेवा विकसित कर सकते हैं, लेकिन इसमें सामान्यतः JAX-RS / JAXB / JPA जैसे उच्च स्तर के विनिर्देशों से अधिक कोड शामिल होता है।
bdouagan

जवाबों:


72

JAX-RS / जर्सी का उपयोग क्यों करें?

संक्षिप्त जवाब

क्योंकि यह रेस्टफुल सेवाओं के विकास को आसान बनाता है।

लंबा जवाब

JAX-RS एक मानक है जो किसी RESTful सेवा को बनाना आसान बनाता है जिसे किसी भी जावा एप्लिकेशन सर्वर पर तैनात किया जा सकता है: GlassFish, WebLogic, WebSphere, JBoss, आदि।

JAX-RS जावा EE का हिस्सा है, और जब JAX-RS का उपयोग अन्य जावा EE तकनीकों के साथ किया जाता है, तो यह आपकी RESTful सेवा बनाने में और भी आसान हो जाता है:

  • EJB - एक सत्र बीन का उपयोग सेवा कार्यान्वयन के रूप में किया जाता है और लेनदेन शब्दार्थ भी संभालता है।
  • JAX-RS - सत्र बीन को एक निष्ठावान सेवा के रूप में उजागर करने के लिए उपयोग किया जाता है
  • JPA - डेटाबेस में POJOs को बनाए रखने के लिए उपयोग किया जाता है। ध्यान दें कि सत्र बीन पर EntityManager को कैसे इंजेक्ट किया जाता है।
  • JAXB - XML ​​में POJO को / से परिवर्तित करने के लिए उपयोग किया जाता है (GlassFish में इसका उपयोग POJO को / JSON से परिवर्तित करने के लिए भी किया जा सकता है)। JAX-RS डिफ़ॉल्ट रूप से JAXB कार्यान्वयन के साथ सहभागिता को संभालता है।

नमूना JAX-RS सेवा

package org.example;

import java.util.List;

import javax.ejb.*;
import javax.persistence.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

@Stateless
@LocalBean
@Path("/customers")
public class CustomerService {

    @PersistenceContext(unitName="CustomerService",
                        type=PersistenceContextType.TRANSACTION)
    EntityManager entityManager;

    @POST
    @Consumes(MediaType.APPLICATION_XML)
    public void create(Customer customer) {
        entityManager.persist(customer);
    }

    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("{id}")
    public Customer read(@PathParam("id") long id) {
        return entityManager.find(Customer.class, id);
    }

    @PUT
    @Consumes(MediaType.APPLICATION_XML)
    public void update(Customer customer) {
        entityManager.merge(customer);
    }

    @DELETE
    @Path("{id}")
    public void delete(@PathParam("id") long id) {
        Customer customer = read(id);
        if(null != customer) {
            entityManager.remove(customer);
        }
    }

    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("findCustomersByCity/{city}")
    public List<Customer> findCustomersByCity(@PathParam("city") String city) {
        Query query = entityManager.createNamedQuery("findCustomersByCity");
        query.setParameter("city", city);
        return query.getResultList();
    }

}

अधिक जानकारी के लिए:


"सत्र बीन" शब्द यहां भ्रामक है। जैसा कि आपका कोड दिखाता है, RESTful समापन बिंदु को स्टेटलेस माना जाता है। कोई सत्र नहीं रखा है।
फि

तो, JAX-RS आपके asnwer के आधार पर अधिक XML अनुकूल है कि JSON रूपांतरण केवल GlassFish सर्वर के साथ उपलब्ध है? धन्यवाद
पिक्सेल

क्या कोई स्प्रिंगबूट के साथ अंतर पर टिप्पणी कर सकता है? क्यों एक दूसरे पर प्रयोग करें? धन्यवाद
पिक्सेल

58

REST एक वास्तुकला है, जो स्वाभाविक रूप से सर्वलेट्स का उपयोग करता है।

नहीं ऐसा नहीं है। REST एक वास्तुकला शैली है जिसे सर्वलेट्स का उपयोग करके कार्यान्वित किया जा सकता है, लेकिन इनका उपयोग स्वाभाविक रूप से नहीं होता है, और न ही जावा के साथ इनका कोई लेना-देना है।

JAX-RS एक JSR स्पेसिफिकेशन है जो Restful Web Services के लिए Java API को परिभाषित करता है।

जर्सी JAX-RS का एक विशिष्ट कार्यान्वयन है।

जैसे कि जर्सी का उपयोग करना है या JAX-RS विनिर्देश के अनुरूप होने का प्रयास करना है, यह आपके ऊपर निर्भर है। यदि यह आपके काम को आसान बनाता है, तो बढ़िया है! यदि कोई आपको मजबूर नहीं करता है।


12
+1 अतिरिक्त नोट: JAX-RS का उपयोग करना लगभग गारंटी है कि सर्वलेट्स का उपयोग करके अपने स्वयं के ReSTful कार्यान्वयन को रोल करने की तुलना में कहीं अधिक आसान है। यह पूरी बात है।
रयान स्टीवर्ट

@ रयान, डॉन: इस सवाल का पूरा उद्देश्य है - क्या हमें उपरोक्त उल्लिखित गतिविधियों को आसान बनाने के लिए केवल जर्सी की आवश्यकता है। और मुझे पता है कि JAX-RS क्या है, मैं सिर्फ यह जानना चाहता हूं कि जावा लोग इसके लिए अलग एपीआई की पेशकश क्यों कर रहे हैं ... PHP किसी भी तरह की पेशकश नहीं करता है और अभी भी वे अच्छा कर रहे हैं ऐसा लगता है।
विनऑरविन

7
@WinOrWin: हम असेंबली में भी सब कुछ कर सकते हैं, इसलिए जावा का उपयोग क्यों करें? मैं कह सकता हूं कि दोनों तरीकों से एक ReSTful API लिख सकते हैं, और तय कर सकते हैं कि आप किस पर और क्या करना चाहते हैं।
रयान स्टीवर्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.