Разница между JAX-RS и Spring Rest


138

Меня смутила разница между JAX-RS (ну, может быть, для сравнения следует использовать Джерси, поскольку JAX-RS - это просто спецификация) и Spring для сервисов Restful . Я попытался найти дополнительную информацию в Интернете, и это стало более запутанным. Моя компания использует Spring MVC для разработки Restful API.

Непонятная часть заключается в том, что JAX-RS означает Java API для веб-служб RESTful , в Spring я также использую java для разработки веб-служб RESTful, поэтому я не вижу различий. Соответствует ли Spring спецификациям JAX-RS?

Из того, что я знаю до сих пор:

  1. JAX-RS - это план / спецификация, в качестве реализации он имеет Jersey, RESTeasy и т. Д.

@ CássioMazzochiMolin спасибо за ваш ответ, я приму его еще немного, еще один вопрос, вы упомянули, что Spring Framework не является реализацией JAX-RS, за какой спецификацией следует Spring? Спасибо
hades

3
Он не реализует какую-либо конкретную спецификацию. Это просто способ работы Spring . Возможности REST предоставляются spring-webmvcмодулем, который также предоставляет Spring модель-представление-контроллер.
кассиомолин

Ответы:


150

JAX-RS

JAX-RS - это спецификация для реализации веб-сервисов REST в Java, в настоящее время определенная в JSR-370 . Это часть технологий Java EE , в настоящее время определенных в JSR 366 .

Jersey (поставляется с GlassFish и Payara) является эталонной реализацией JAX-RS, однако существуют и другие реализации, такие как RESTEasy (поставляется с JBoss EAP и WildFly) и Apache CXF (поставляется с TomEE и WebSphere).

Spring Framework

Spring Framework является полной структурой , которая позволяет создавать корпоративные приложения Java. Возможности REST предоставляются модулем Spring MVC (тот же модуль, который предоставляет возможности контроллера представления модели ). Это не реализация JAX-RS, и ее можно рассматривать как альтернативу Spring стандарту JAX-RS.

Экосистема Spring также предоставляет широкий спектр проектов для создания корпоративных приложений, включая постоянство, безопасность, интеграцию с социальными сетями, пакетную обработку и т. Д.

Примеры

Рассмотрим следующий контроллер ресурсов, использующий 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();
    }
}

Эквивалентная реализация с использованием Spring MVC API:

@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 и Jersey

Spring Boot предоставляет spring-boot-starter-jerseyмодуль, который позволяет использовать модель программирования JAX-RS для конечных точек REST вместо Spring MVC. Он неплохо работает с Jersey 2.x.

Полный пример создания веб-приложения с помощью Jersey 2.x и Spring Boot 1.4.x см. В этом ответе .


Итак, если мы используем Spring MVC и удаляем его в GlassFish / Payara, нужно ли нам отключать реализации jax-rs на сервере?
Pradeep_Evol

эта статья верна для весны 4 dzone.com/articles/… ? что Spring Web лучше делать resT веб-сервисы, чем просто Spring + Jersey (JAX-RS)?
tgkprog

58

Различия в аннотациях

(По состоянию на 2018 год) Spring MVC не стандартизирован для аннотаций JAX-RS, поскольку его решение предшествует JAX-RS. Вот эквиваленты:

введите описание изображения здесь

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

Если вы используете нестандартные API, вы должны ожидать, что они будут устаревшими и, возможно, заменены более новым экспериментальным API через несколько лет. Намного меньше ответственности за обратную совместимость (например, когда выпускаются новые версии JDK).


Большое спасибо, это потрясающе
Бежонд

26

Я работал как с Jersey Rest, так и с Spring Rest и Jersey Rest с пружиной. Оба они представляют собой очень богатые фреймворки с хорошими реализациями. Я бы посоветовал лучше использовать Spring rest, если вы используете другие службы Spring, такие как ORM, Spring security и DI и т. Д. Обе библиотеки являются Spring библиотеками, поэтому мне немного легче управлять кодом и зависимостями.

Плюсы JAX-RS:

  • Стандарт JSR может работать без контейнера сервлетов (grizzly, simple, ...)
  • Готовые к производству реализации (jersey, cxf, resteasy, restlet, ...), разработанные только для приложений REST

Плюсы Spring MVC:

  • Предоставлять «полный» стек, а не только возможности REST

  • Внедрение зависимостей / AOP / Транзакции

  • Подключаемые шаблоны представления (JSP, freemarker, скорость, ...)

Вы можете узнать больше по следующим ссылкам

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. Зачем использовать JAX-RS / Джерси?

4
Однако JAX-RS можно использовать и со Spring (для DI, AOP, ...).
deamon

5

JAX-RS - это спецификация, а джерси и т. Д. - его реализация. Люди используют Spring для создания веб-сервисов RestFul, потому что spring вместе с спокойной реализацией предоставляет такие вещи, как интеграция с гибернацией, а также такие вещи, как IOC и ориентированное на аспекты программирование.

Там, где, как если бы мы использовали трикотаж для нашей реализации, проблема будет в том, что данные должны быть получены из серверной части с использованием некоторых технологий ORM, и нам придется написать шаблонный код для этого.

По этой причине люди и даже предприятия используют Spring, поскольку наряду с реализацией Rest он также предоставляет возможности Spring. И теперь, используя последнюю реализацию загрузки Spring, мы можем очень быстро начать разработку без множества настроек.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.