Pomyliłem się z różnicą między JAX-RS (cóż, może powinienem użyć Jersey do porównania, ponieważ JAX-RS to tylko specyfikacja) i Spring for Restful services . Próbowałem poszukać więcej informacji w Internecie i stało się to bardziej zagmatwane. Moja firma używa Spring MVC do tworzenia Restful API
Mylące jest to, że JAX-RS oznacza Java API dla RESTful Web Services , wiosną używam javy również do tworzenia RESTful Web Services, więc tak naprawdę nie rozumiem różnic. Czy Spring jest zgodny ze specyfikacjami JAX-RS?
Z tego, co wiem do tej pory:
- JAX-RS jest planem / specyfikacją, ma Jersey, RESTeasy itp. Jako implementacje.
spring-mvc
jersey
jax-rs
Hades
źródło
źródło
spring-webmvc
moduł, który zapewnia również kontroler widoku modelu Springa.Odpowiedzi:
JAX-RS
JAX-RS to specyfikacja implementacji usług sieciowych REST w Javie, obecnie zdefiniowana przez JSR-370 . Jest częścią technologii Java EE , obecnie definiowanych przez JSR 366 .
Jersey (dostarczany z GlassFish i Payara) jest implementacją referencyjną JAX-RS, jednak istnieją inne implementacje, takie jak RESTEasy (dostarczane z JBoss EAP i WildFly) i Apache CXF (dostarczane z TomEE i WebSphere).
Spring Framework
Spring Framework jest pełne ramy , które pozwala na tworzenie aplikacji biznesowych Java. Możliwości REST są dostarczane przez moduł Spring MVC (ten sam moduł, który zapewnia możliwości kontrolera widoku modelu ). Nie jest to implementacja JAX-RS i może być postrzegana jako wiosenna alternatywa dla standardu JAX-RS.
Ekosystem Spring zapewnia również szeroką gamę projektów do tworzenia aplikacji korporacyjnych, obejmujących trwałość, bezpieczeństwo, integrację z sieciami społecznościowymi, przetwarzanie wsadowe itp.
Przykłady
Rozważ następujący kontroler zasobów korzystający z interfejsu API JAX-RS:
@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(); } }
Równoważna implementacja wykorzystująca Spring MVC API wyglądałaby tak:
@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); } }
Używanie Spring Boot i Jersey
Spring Boot udostępnia
spring-boot-starter-jersey
moduł umożliwiający wykorzystanie modelu programowania JAX-RS dla punktów końcowych REST zamiast Spring MVC. Działa całkiem dobrze z Jersey 2.x.Pełny przykład tworzenia aplikacji internetowej za pomocą Jersey 2.x i Spring Boot 1.4.x znajduje się w tej odpowiedzi .
źródło
Różnice w adnotacjach
(Stan na 2018 r.) Spring MVC nie ustandaryzował adnotacji JAX-RS, ponieważ jego rozwiązanie jest starsze niż JAX-RS. Oto odpowiedniki:
https://stormpath.com/blog/jax-rs-vs-spring-rest-endpoints
Jeśli używasz niestandardowych interfejsów API, powinieneś spodziewać się, że zostaną one wycofane i prawdopodobnie zastąpione przez nowszy eksperymentalny interfejs API za kilka lat. Jest dużo mniej odpowiedzialności za wsteczną kompatybilność (np. Gdy zostaną wydane nowe wersje JDK).
źródło
Pracowałem zarówno z Jersey Rest, Spring Rest i Jersey Rest with Spring. Oba to bardzo bogate frameworki z ładnymi implementacjami. Sugerowałbym, że lepiej jest wybrać Spring rest, jeśli używasz innych usług Spring, takich jak ORM, Spring Security i DI itp. Obie są bibliotekami Spring, więc czuję się trochę łatwy do zarządzania kodem i zależnościami
Zalety JAX-RS:
Zalety Spring MVC:
Zapewnij „pełny” stos, a nie tylko usługi REST
Wstrzykiwanie zależności / AOP / Transakcje
Wtykowe szablony widoków (JSP, freemarker, prędkość, ...)
Możesz sprawdzić więcej pod poniższymi linkami
źródło
JAX-RS to specyfikacja, a koszulka itp. To jej implementacja. Ludzie używają Springa do tworzenia usług internetowych RestFul, ponieważ wiosna wraz z spokojną implementacją zapewnia takie rzeczy, jak integracja z hibernacją, a także takie rzeczy jak programowanie zorientowane na IOC i Aspect.
Tam, gdzie tak jakbyśmy użyli jersey do naszej implementacji, problem będzie polegał na tym, że dane muszą zostać pobrane z zaplecza przy użyciu niektórych technologii ORM i będziemy musieli napisać standardowy kod dla tego samego.
To jest powód, dla którego ludzie, a nawet przedsiębiorstwa używają wiosny, ponieważ wraz z wdrożeniem Rest zapewnia ona również udogodnienia Spring. A teraz, korzystając z najnowszej implementacji Spring Boot, możemy bardzo szybko rozpocząć programowanie bez wielu konfiguracji.
źródło