Chọn triển khai JAX-RS cho dự án mới


35

Tôi đang bắt đầu một dự án Java mới sẽ yêu cầu API RESTful. Nó sẽ là một ứng dụng kinh doanh SaaS phục vụ khách hàng di động.

Tôi đã phát triển một dự án với Java EE 6, nhưng tôi không rành lắm về hệ sinh thái, vì hầu hết kinh nghiệm của tôi là trên nền tảng của Microsoft.

Đó sẽ là một lựa chọn hợp lý cho việc triển khai JAX-RS cho một dự án mới như được mô tả?

Đánh giá theo danh sách của Wikipedia , các ứng cử viên chính dường như là Jersey, Apache CXF, RESTeasy và Restlet. Nhưng So sánh các triển khai JAX-RS được trích dẫn trên Wikipedia là từ năm 2008.

Ấn tượng đầu tiên của tôi từ trang chủ tương ứng của họ là:

  • CXF nhằm mục đích trở thành một giải pháp rất toàn diện (nhắc nhở tôi về WCF trong không gian của Microsoft), điều này khiến tôi nghĩ rằng có thể phức tạp hơn để hiểu, thiết lập và gỡ lỗi so với những gì tôi cần;
  • Jersey là triển khai tham chiếu và có thể là một lựa chọn tốt, nhưng đó là di sản từ Sun và tôi không chắc Oracle đã đối xử với nó như thế nào (trang thông báo không hoạt động và thông báo cam kết cuối cùng là từ 4 tháng trước);
  • RESTeasy là từ JBoss và có lẽ là một lựa chọn vững chắc, mặc dù tôi không chắc chắn về việc học đường cong;
  • Restlet dường như rất phổ biến nhưng có rất nhiều lịch sử, tôi không chắc nó cập nhật như thế nào trong thế giới Java EE 6 hoặc nếu nó mang một tư duy J2EE nặng nề (như rất nhiều cấu hình XML).

Điều gì sẽ là công đức của mỗi trong số các lựa chọn thay thế? Học đường cong thì sao? Hỗ trợ tính năng? Công cụ (ví dụ: trình hướng dẫn NetBeans hoặc Eclipse)? Điều gì về dễ dàng gỡ lỗi và cũng triển khai? Có ai trong số các dự án này cập nhật hơn các dự án khác không? Làm thế nào ổn định là họ?


1
Tôi đánh giá cao việc chỉnh sửa tiêu đề, nhưng tôi không thực sự hỏi liệu JAX-RS có phù hợp với dự án di động hay không; đó sẽ là một câu hỏi khác Tôi đang cố gắng tìm hiểu triển khai JAX-RS nào sẽ được khuyến nghị.
Fernando Correia

Câu trả lời:


22

Tôi đã yêu thích Dropwizard cho một giải pháp tổng thể

Thay vì đi theo một số cách tiếp cận thùng chứa ứng dụng khổng lồ, Dropwizard ủng hộ một giải pháp nhẹ mang lại chu kỳ phát triển nhanh hơn nhiều. Về cơ bản, nó cung cấp keo cho các khung nổi tiếng sau:

  • Cầu tàu (HTTP)
  • Jersey (JAX-RS)
  • Jackson (JSON hoặc XML)
  • Quả ổi (bổ sung tuyệt vời cho các thư viện JDK)
  • Số liệu (giám sát ứng dụng thời gian thực)
  • Trình xác thực ngủ đông (xác minh đầu vào)
  • OAuth (xác thực RESTful)

Sự kết hợp của những điều trên, cùng với một cách tiếp cận vững chắc để kiểm tra chức năng, mang đến một giải pháp hoàn chỉnh để đưa dịch vụ của bạn hoạt động nhanh chóng.

Vâng? Và câu hỏi JAX-RS tôi đã hỏi ...

Bạn sẽ nhận thấy rằng lựa chọn của họ là Jersey, triển khai JAX-RS tham khảo. Trở thành một anh chàng REST dễ dàng, tôi nghĩ đây sẽ là một vấn đề, nhưng không có đường cong học tập. Hai phần lớn có thể hoán đổi cho nhau. Tuy nhiên, tôi sẽ nói rằng khách hàng Jersey cung cấp một giao diện trôi chảy để xây dựng các bài kiểm tra. Một ví dụ sẽ là ...

 @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
Cảm ơn bạn rất nhiều vì đã mang Dropwizard đến sự chú ý của tôi. Tôi không biết về nó và nó có vẻ rất phù hợp với nhu cầu của tôi. Nó có vẻ tốt, thực tế và thực tế và có thể giúp tôi tiết kiệm rất nhiều rắc rối trong khi giúp tôi xây dựng một giải pháp tốt hơn nhiều so với những gì tôi có thể có về kiến ​​thức hời hợt về nền tảng Java EE. Và đến từ một công ty thành công như Yammer phục vụ thị trường doanh nghiệp chắc chắn là một điểm cộng. Một lần nữa, cảm ơn rất nhiều.
Fernando Correia

1
Không vấn đề gì. Tôi đã viết về một dự án của tôi thể hiện nhiều tính năng của Dropwizard. Đó là theo giấy phép MIT, vì vậy hãy thoải mái sử dụng khi bạn cần: gary-rowe.com/agilestack/2012/06/06/ mẹo
Gary Rowe

Điều đó sẽ giúp. Nhiều đánh giá cao.
Fernando Correia

1
Tôi đã nghiêng về việc sử dụng Jackson, Guava, Trình xác thực và OAuth, vì vậy điều này có vẻ như không có trí tuệ ... Cảm ơn.
PhiLho

Cảnh báo: Jersey 2.0 kém hơn đáng kể so với 1.0. Đó là thiếu chức năng đã từng tồn tại trong 1.0, nó buộc một khung DI cụ thể đối với bạn và sự hỗ trợ của cộng đồng còn tệ hơn nhiều so với trước đây.
Gili

6

Bạn có thể xem câu hỏi này , trong đó thảo luận về một số kinh nghiệm từ các nhà phát triển khác.

Cá nhân tôi có thể giới thiệu Jersey. Nó rất dễ sử dụng và nó có một lợi ích tốt vì đây là cách triển khai tham chiếu. Điều này cũng có nghĩa là nó sẽ được duy trì và hỗ trợ trong thời gian tới.


1
Cảm ơn bạn đã trả lời hữu ích và liên kết với câu hỏi liên quan đó - thật kỳ lạ, nó không xuất hiện trong tìm kiếm . Tuy nhiên, câu trả lời đó là từ 4 năm trước, vì vậy tôi đánh giá cao đề xuất cập nhật của bạn.
Fernando Correia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.