새 프로젝트를위한 JAX-RS 구현 선택


35

RESTful API가 필요한 새 Java 프로젝트를 시작하고 있습니다. 모바일 클라이언트를 지원하는 SaaS 비즈니스 애플리케이션이 될 것입니다.

Java EE 6을 사용하여 하나의 프로젝트를 개발했지만 대부분의 경험이 Microsoft 플랫폼에 있기 때문에 생태계에 익숙하지 않습니다.

설명 된 것과 같은 새 프로젝트에 대한 JAX-RS 구현에 적합한 선택은 무엇입니까?

으로 판단 위키 백과의 목록 , 주요 경쟁자는 뉴저지, 아파치 CXF, RESTEasy가 및으로 Restlet 것으로 보인다. 그러나 Wikipedia에 인용 된 JAX-RS 구현 비교는 2008 년부터입니다.

해당 홈페이지에서 첫 인상은 다음과 같습니다.

  • CXF 는 매우 포괄적 인 솔루션 (Microsoft 공간에서 WCF를 생각 나게 함)을 목표로합니다. 따라서 필요한 것보다 이해, 설정 및 디버깅이 더 복잡 할 수 있습니다.
  • Jersey 는 참조 구현이며 좋은 선택이지만 Sun의 유산이며 Oracle이이를 어떻게 처리하고 있는지 잘 모르겠습니다 (공지 페이지가 작동하지 않고 마지막 커밋 알림은 4 개월 전).
  • RESTeasy 는 JBoss에서 왔으며 아마도 견고한 옵션이지만 학습 곡선에 대해서는 잘 모르겠습니다.
  • Restlet 은 인기가 있지만 많은 역사를 가지고 있습니다 .Java EE 6 세계에서 최신 상태인지 또는 많은 XML 구성과 같은 무거운 J2EE 마인드를 가지고 있는지 확실하지 않습니다.

이 대안들 각각의 장점은 무엇입니까? 학습 곡선은 어떻습니까? 기능 지원? 툴링 (예 : NetBeans 또는 Eclipse 마법사)? 간편한 디버깅 및 배포는 어떻습니까? 이 프로젝트 중 다른 프로젝트보다 최신 프로젝트가 있습니까? 그것들은 얼마나 안정적입니까?


1
제목 편집은 고맙지 만 JAX-RS가 모바일 프로젝트에 적합한 지 묻지 않습니다. 또 다른 질문이 될 것입니다. 권장되는 JAX-RS 구현을 찾으려고합니다.
페르난도 코 레이아

답변:


22

전반적인 솔루션으로 Dropwizard 를 사랑 하게 되었습니다.

Dropwizard는 거대한 응용 프로그램 컨테이너 접근 방식 대신 개발주기가 훨씬 빠른 경량 솔루션을 옹호합니다. 기본적으로 다음과 같은 잘 알려진 프레임 워크에 대한 접착제를 제공합니다.

  • 부두 (HTTP)
  • 저지 (JAX-RS)
  • 잭슨 (JSON 또는 XML)
  • 구아바 (JDK 라이브러리에 탁월한 추가 기능)
  • 지표 (실시간 응용 프로그램 모니터링)
  • 최대 절전 모드 (입력 확인)
  • OAuth (RESTful 인증)

위의 기능 조합과 기능 테스트에 대한 견고한 접근 방식은 서비스를 신속하게 시작하고 실행할 수있는 완벽한 솔루션을 제공합니다.

네? 그리고 JAX-RS 질문은 ...

그들의 선택은 참조 JAX-RS 구현 인 Jersey입니다. 편안한 사람이기 때문에 이것이 문제가 될 것이라고 생각했지만 학습 곡선이 없었습니다. 이 둘은 크게 호환됩니다. 그러나 Jersey 클라이언트는 테스트 구성을위한 유연한 인터페이스를 제공했다고 말할 수 있습니다. 예를 들면 ...

 @Override
  protected void setUpResources() {
    addResource(new HelloWorldResource("Hello, %s!","Stranger"));

    setUpAuthenticator();
  }

  @Test
  public void simpleResourceTest() throws Exception {

    Saying expectedSaying = new Saying(1,"Hello, Stranger!");

    Saying actualSaying = client()
      .resource("/hello-world")
      .get(Saying.class);

    assertEquals("GET hello-world returns a default",expectedSaying.getContent(),actualSaying.getContent());

}

2
Dropwizard에 관심을 가져 주셔서 감사합니다. 나는 그것에 대해 몰랐고 그것은 내 요구에 매우 잘 맞는 것 같습니다. 잘 생각되고 실용적이며 철저한 것으로 보이며 Java EE 플랫폼에 대한 피상적 인 지식을 제공 할 수있는 것보다 훨씬 더 나은 솔루션을 구축하는 데 많은 어려움을 겪을 수 있습니다. 기업 시장에 서비스를 제공하는 Yammer와 같은 성공적인 회사에서 오는 것은 확실히 장점입니다. 다시 한번 감사드립니다.
페르난도 코 레이아

1
문제 없어. Dropwizard의 많은 기능을 보여주는 내 프로젝트에 대해 블로그를 작성했습니다. 그것은 MIT 라이센스하에 있으므로 필요에 따라 자유롭게 사용하십시오 : gary-rowe.com/agilestack/2012/06/06/…
Gary Rowe

도움이 될 것입니다. 매우 감사.
페르난도 코 레이아

1
나는 Jackson, Guava, Validator 및 OAuth를 사용하는 것에 이미 기울고 있었으므로 이것은 당연한 것처럼 보입니다 ... 고마워.
PhiLho

경고 : Jersey 2.0은 1.0보다 상당히 나쁩니다. 1.0에 존재했던 기능이 누락되어 특정 DI 프레임 워크를 강제 실행하며 커뮤니티 지원이 이전보다 훨씬 나빠졌습니다.
길리

6

다른 개발자의 경험에 대해 논의하는 이 질문을 살펴볼 수 있습니다 .

개인적으로 Jersey를 추천 할 수 있습니다. 사용하기가 매우 쉽고 참조 구현이기 때문에 다음과 같은 장점이 있습니다. 이것은 또한 다음에 잠시 유지되고 지원 될 것임을 의미합니다.


1
유용한 답변과 관련 질문에 연결해 주셔서 감사합니다. 이상하게도 검색 에 나타나지 않았습니다 . 하지만 그 대답은 4 년 전의 것이므로 최신 권장 사항에 감사드립니다.
페르난도 코 레이아
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.