JAX-RS ve Yay Dinlenme Arasındaki Fark


138

JAX-RS (JAX-RS sadece spesifik olduğu için karşılaştırma yapmak için belki Jersey'i kullanmalıyım) ve Spring for Restful servisleri arasındaki farkla karıştırdım . İnternette daha fazla bilgi aramaya çalıştım ve daha kafa karıştırıcı hale geldi. Şirketim, Restful API'leri geliştirmek için Spring MVC kullanıyor

Kafa karıştıran kısım şu ki, JAX-RS, RESTful Web Hizmetleri için Java API anlamına geliyor , İlkbaharda RESTful Web Hizmetlerini geliştirmek için java kullanıyorum, bu yüzden aslında farkları anlamıyorum. Spring, JAX-RS spesifikasyonlarına uyuyor mu?

Şimdiye kadar bildiklerimden:

  1. JAX-RS bir taslak / spesifikasyondur, uygulama olarak Jersey, RESTeasy vb.

@ CássioMazzochiMolin cevabınız için teşekkürler, bir süre sonra kabul edeceğim, bir soru daha, Spring Framework'ün bir JAX-RS uygulaması olmadığını söylediniz, hangi şartname Spring takip ediyor? Teşekkürler
hades

3
Herhangi bir özel şartname uygulamaz. İşleri yapmanın sadece Bahar yolu . REST yetenekleri spring-webmvc, Spring'in model-görünüm-kontrolörünü de sağlayan modül tarafından sağlanır .
cassiomolin

Yanıtlar:


150

JAX-RS

JAX-RS , şu anda JSR-370 tarafından tanımlanan Java'da REST web hizmetlerinin uygulanmasına yönelik bir belirtimdir . Şu anda JSR 366 tarafından tanımlanan Java EE teknolojilerinin bir parçasıdır .

Jersey (GlassFish ve Payara ile birlikte gönderilir) JAX-RS referans uygulamasıdır, ancak RESTEasy (JBoss EAP ve WildFly ile birlikte gelir) ve Apache CXF (TomEE ve WebSphere ile birlikte gelir ) gibi başka uygulamalar da vardır .

Bahar Çerçevesi

Bahar Çerçeve bir olduğunu tam çerçeve Java kurumsal uygulamalar oluşturmanıza olanak sağlar. REST yetenekleri, Spring MVC modülü tarafından sağlanır ( model-görünüm-kontrolör yetenekleri sağlayan aynı modül ). Bir JAX-RS uygulaması değildir ve JAX-RS standardına bir Bahar alternatifi olarak görülebilir.

Spring ekosistemi ayrıca kurumsal uygulamalar oluşturmak için kalıcılık, güvenlik, sosyal ağlarla entegrasyon, toplu işlem vb. Gibi çok çeşitli projeler sunar .

Örnekler

JAX-RS API kullanan aşağıdaki kaynak denetleyicisini düşünün:

@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();
    }
}

Spring MVC API kullanan eşdeğer uygulama şöyle olacaktır:

@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 ve Jersey'i kullanma

Spring Boot, spring-boot-starter-jerseySpring MVC yerine REST uç noktaları için JAX-RS programlama modelini kullanmanıza izin veren modülü sağlar. Jersey 2.x ile oldukça iyi çalışıyor.

Jersey 2.x ve Spring Boot 1.4.x ile bir web uygulaması oluşturmanın eksiksiz bir örneği için bu yanıta bakın .


Yani spring MVC kullanırsak ve GlassFish / Payara'da depoyersek, sunucudaki jax-rs uygulamalarını devre dışı bırakmamız gerekir mi?
Pradeep_Evol

bu makale spring 4 dzone.com/articles/… için doğru mu? o Spring Web, resT web servisleri yapmak için Spring + Jersey'den (JAX-RS) daha iyidir?
tgkprog

58

Ek açıklama farklılıkları

(2018 itibariyle) Spring MVC, çözümü JAX-RS'den önce geldiğinden JAX-RS açıklamalarına göre standartlaştırılmamıştır. İşte eşdeğerler:

görüntü açıklamasını buraya girin

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

Standartlaştırılmamış API'ler kullanıyorsanız, bunların kullanımdan kaldırılmasını ve muhtemelen birkaç yıl içinde daha yeni bir deneysel API'nin yerini almasını beklemelisiniz. Geriye dönük uyumluluk konusunda çok daha az sorumluluk söz konusudur (örneğin, yeni bir JDK sürümleri piyasaya sürüldüğünde).


Çok teşekkürler, bu harika
Bejond

26

Hem Jersey Rest, Spring Rest hem de Jersey Rest ile Spring ile çalıştım. Her ikisi de güzel uygulamalara sahip çok zengin çerçevelerdir. ORM, Spring güvenliği ve DI gibi diğer Spring hizmetlerini kullanıyorsanız, Spring rest ile gitmenin daha iyi olacağını öneririm. Her ikisi de bahar kitaplıklarıdır, bu yüzden kodu ve bağımlılıkları yönetmek için biraz kolay hissediyorum

JAX-RS artıları:

  • JSR standardı servlet konteyneri olmadan çalıştırılabilir (ızgaralı, basit, ...)
  • Yalnızca REST uygulamaları için tasarlanmış üretime hazır uygulamalar (jersey, cxf, resteasy, restlet, ...)

Bahar MVC artıları:

  • Yalnızca REST tesisleri değil, "tam" yığın sağlayın

  • Bağımlılık ekleme / AOP / İşlemler

  • Takılabilir görünüm şablonları (JSP, freemarker, velocity, ...)

Aşağıdaki bağlantılarda daha fazlasını kontrol edebilirsiniz

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. Neden JAX-RS / Jersey kullanmalı?

4
Ancak JAX-RS, Yay ile de kullanılabilir (DI, AOP, ... için).
deamon

5

JAX-RS spesifikasyondur ve jarse vb. Uygulamasıdır. İnsanlar, RestFul web Servislerini yapmak için Spring'i kullanıyorlar, çünkü bahar, dinlendirici uygulama ile birlikte hazırda bekletme entegrasyonu gibi şeyler ve ayrıca IOC ve Aspect odaklı programlama gibi şeyler sağlıyor.

Uygulamamız için jarse kullanıyormuşuz gibi sorun, verilerin bazı ORM teknolojileri kullanılarak arka uçtan getirilmesi ve bunun için standart kod yazmamız gerekecek.

İnsanların ve hatta işletmelerin ilkbaharı kullanmasının nedeni de budur, Rest uygulaması ile birlikte Spring tesisleri de sağlar. Ve şimdi en son Spring boot uygulamasını kullanarak, çok fazla konfigürasyon olmadan çok hızlı bir şekilde geliştirmeye başlayabiliriz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.