JAX-RS와 스프링 레스트의 차이점


138

JAX-RS (JAX-RS는 스펙이기 때문에 Jersey를 사용하여 비교해야 할 수도 있음)와 Spring for Restful services 의 차이점과 혼동되었습니다 . 온라인에서 더 많은 정보를 검색하려고했지만 더 혼란스러워졌습니다. 우리 회사는 Spring MVC를 사용하여 Restful API 개발

혼란스러운 부분은 JAX-RS가 RESTful Web Services의 Java API를 나타내며 Spring에서 java를 사용하여 RESTful Web Services를 개발하므로 실제로 차이점을 얻지 못합니다. Spring은 JAX-RS 사양을 준수합니까?

내가 아는 것부터 지금까지 :

  1. JAX-RS는 청사진 / 사양이며 Jersey, RESTeasy 등을 구현으로 사용합니다.

@ CássioMazzochiMolin 귀하의 답변에 감사드립니다. 한 번 더 질문을 받아 들일 것입니다 .The Spring Framework는 JAX-RS 구현이 아니라고 언급했습니다. 덕분에
하데스

3
특정 사양을 구현하지 않습니다. 그것은 일을하는 봄의 방법 일뿐 입니다. REST 기능은 spring-webmvc스프링의 모델 뷰 컨트롤러를 제공 하는 모듈 에 의해 제공됩니다 .
cassiomolin

답변:


150

JAX-RS

JAX-RS는 현재 JSR-370에 의해 정의 된 Java로 REST 웹 서비스를 구현하기위한 스펙 입니다 . 이것은 현재 JSR 366에 의해 정의 된 Java EE 기술의 일부입니다 .

Jersey (GlassFish 및 Payara와 함께 제공)는 JAX-RS 참조 구현이지만 RESTEasy (JBoss EAP 및 WildFly와 함께 제공) 및 Apache CXF 와 같은 다른 구현도 있습니다. (TomEE 및 WebSphere와 함께 제공 있습니다.

스프링 프레임 워크

스프링 프레임 워크는 A는 전체 프레임 워크 는 자바 엔터프라이즈 응용 프로그램을 만들 수 있습니다. REST 기능은 Spring MVC 모듈 ( 모델보기 컨트롤러 기능 을 제공하는 동일한 모듈 )에 의해 제공됩니다. JAX-RS 구현이 아니며 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는 spring-boot-starter-jerseySpring MVC 대신 REST 엔드 포인트에 JAX-RS 프로그래밍 모델을 사용할 수 있는 모듈을 제공합니다 . Jersey 2.x와 잘 작동합니다.

Jersey 2.x 및 Spring Boot 1.4.x를 사용하여 웹 애플리케이션을 작성하는 전체 예제는이 답변을 참조하십시오 .


스프링 MVC를 사용하고 GlassFish / Payara에서 depoy하면 서버에서 jax-rs 구현을 비활성화해야합니까?
Pradeep_Evol

이 글은 스프링 (4)와 사실 dzone.com/articles/... ? 그 스프링 웹은 스프링 + 저지 (JAX-RS)보다 resT 웹 서비스를 만드는 것이 더 낫습니까?
tgkprog

58

주석 차이

(2018 년 기준) Spring MVC는 솔루션이 JAX-RS보다 우선하므로 JAX-RS 주석으로 표준화되지 않았습니다. 이에 상응하는 내용은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

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

표준화되지 않은 API를 사용하는 경우 몇 년 안에 새로운 실험용 API가 더 이상 사용되지 않고 대체 될 것으로 예상해야합니다. 이전 버전과의 호환성에 대한 책임이 훨씬 적습니다 (예 : 새 JDK 버전이 출시 될 때).


고마워, 이것은 굉장하다
Bejond

26

나는 Jersey Rest, spring rest 및 Jersey Rest와 함께 봄을 함께했습니다. 둘 다 훌륭한 구현을 가진 매우 풍부한 프레임 워크입니다. ORM, Spring security 및 DI 등과 같은 다른 Spring 서비스를 사용하는 경우 Spring rest와 함께하는 것이 좋습니다. 둘 다 스프링 라이브러리이므로 코드 및 종속성 관리가 약간 쉽다고 생각합니다.

JAX-RS 전문가 :

  • 서블릿 컨테이너없이 JSR 표준을 실행할 수 있습니다 (회색, 단순, ...)
  • REST 애플리케이션 전용으로 설계된 프로덕션 지원 구현 (jersey, cxf, resteasy, restlet 등)

스프링 MVC 전문가 :

  • REST 기능뿐만 아니라 "전체"스택 제공

  • 의존성 주입 / AOP / 트랜잭션

  • 플러그 가능 뷰 템플릿 (JSP, 프리 마커, 속도 등)

다음 링크에서 더 확인할 수 있습니다

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. 왜 JAX-RS / Jersey를 사용합니까?

4
그러나 JAX-RS는 Spring (DI, AOP, ...의 경우)에도 사용할 수 있습니다.
deamon

5

JAX-RS는 사양이고 저지 등은 그 구현입니다. 사람들은 Spring을 사용하여 RestFul 웹 서비스를 만듭니다. Spring은 편안한 구현과 함께 최대 절전 모드 통합 및 IOC 및 Aspect 지향 프로그래밍과 같은 기능을 제공하기 때문입니다.

우리가 구현을 위해 저지를 사용하는 것처럼 문제는 일부 ORM 기술을 사용하여 백엔드에서 데이터를 가져와야하며 동일한 상용구 코드를 작성해야합니다.

이것이 바로 사람과 기업조차도 Spring을 사용하고 Rest 구현과 함께 Spring 기능도 제공하는 이유입니다. 이제 최신 스프링 부트 구현을 사용하여 많은 구성없이 개발을 매우 빠르게 시작할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.