Sự khác biệt giữa JAX-RS và Spring Rest


137

Tôi đã nhầm lẫn với sự khác biệt giữa JAX-RS (tốt, có lẽ nên sử dụng Jersey để so sánh vì JAX-RS chỉ là thông số kỹ thuật) và các dịch vụ Spring for Restful . Tôi đã cố gắng tìm kiếm thêm thông tin trực tuyến và nó trở nên khó hiểu hơn. Công ty của tôi đang sử dụng Spring MVC để phát triển các API đầy đủ

Phần khó hiểu là, JAX-RS là viết tắt của API Java cho các dịch vụ web RESTful , vào mùa xuân tôi cũng đang sử dụng java để phát triển các dịch vụ web RESTful, vì vậy tôi thực sự không nhận được sự khác biệt. Spring có tuân theo thông số kỹ thuật của JAX-RS không?

Từ những gì tôi biết cho đến bây giờ:

  1. JAX-RS là một bản thiết kế / thông số kỹ thuật, nó có Jersey, RESTeasy, v.v.

@ CássioMazzochiMolin cảm ơn câu trả lời của bạn, tôi sẽ chấp nhận nó sau một thời gian nữa, một câu hỏi nữa, bạn đã đề cập rằng Spring Framework không phải là triển khai JAX-RS, đặc điểm kỹ thuật nào là Spring theo sau? Cảm ơn
hades

3
Nó không thực hiện bất kỳ đặc điểm kỹ thuật cụ thể. Đó chỉ là cách làm mùa xuân . Các khả năng REST được cung cấp bởi spring-webmvcmô-đun cũng cung cấp bộ điều khiển xem mô hình của Spring.
cassiomolin

Câu trả lời:


149

JAX-RS

JAX-RS là một đặc tả để triển khai các dịch vụ web REST trong Java, hiện được xác định bởi JSR-370 . Nó là một phần của các công nghệ Java EE , hiện được xác định bởi JSR 366 .

Jersey (được vận chuyển bằng GlassFish và Payara) là triển khai tham chiếu JAX-RS, tuy nhiên, có những triển khai khác như RESTPal (được vận chuyển với JBoss EAP và WildFly) và Apache CXF (được vận chuyển bằng TomEE và WebSphere).

Khung mùa xuân

Các Spring Framework là một khuôn khổ đầy đủ cho phép bạn tạo ra các ứng dụng doanh nghiệp Java. Các khả năng REST được cung cấp bởi mô-đun Spring MVC (cùng mô-đun cung cấp các khả năng của trình điều khiển chế độ xem mô hình ). Đây không phải là triển khai JAX-RS và có thể được xem là sự thay thế Mùa xuân cho tiêu chuẩn JAX-RS.

Hệ sinh thái Spring cũng cung cấp một loạt các dự án để tạo các ứng dụng doanh nghiệp, bao gồm sự bền bỉ, bảo mật, tích hợp với các mạng xã hội, xử lý hàng loạt, v.v.

Ví dụ

Hãy xem xét bộ điều khiển tài nguyên sau bằng 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();
    }
}

Việc triển khai tương đương bằng API Spring MVC sẽ là:

@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);
    }
}

Sử dụng Spring Boot và Jersey

Spring Boot cung cấp spring-boot-starter-jerseymô-đun cho phép bạn sử dụng mô hình lập trình JAX-RS cho các điểm cuối REST thay vì Spring MVC. Nó hoạt động khá tốt với Jersey 2.x.

Để biết ví dụ đầy đủ về việc tạo một ứng dụng web với Jersey 2.x và Spring Boot 1.4.x, hãy tham khảo câu trả lời này .


Vì vậy, nếu chúng ta sử dụng spring MVC và depoy nó trong GlassFish / Payara, chúng ta có cần phải vô hiệu hóa các triển khai jax-rs trong máy chủ không?
Pradeep_Evol

Bài viết này có đúng với mùa xuân 4 dzone.com/articles/ không? web mùa xuân có tốt hơn để tạo các dịch vụ web resT hơn là chỉ mùa xuân + Jersey (JAX-RS) không?
tgkprog

58

Chú thích khác biệt

(Kể từ năm 2018) Spring MVC chưa được chuẩn hóa thành các chú thích JAX-RS, vì giải pháp của nó có trước JAX-RS. Dưới đây là các tương đương:

nhập mô tả hình ảnh ở đây

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

Nếu bạn đang sử dụng các API không được chuẩn hóa, bạn nên hy vọng chúng sẽ bị phản đối và có thể được thay thế bởi một API thử nghiệm mới hơn trong một vài năm. Có rất ít trách nhiệm đối với khả năng tương thích ngược (ví dụ: khi một phiên bản JDK mới được phát hành).


Cảm ơn rất nhiều, điều này thật tuyệt vời
Bejond

26

Tôi đã làm việc với cả Jersey Rest, nghỉ xuân và Jersey Rest với mùa xuân. Cả hai đều là các khung rất phong phú với các triển khai tốt đẹp. Tôi khuyên bạn nên sử dụng Spring rest nếu bạn đang sử dụng các dịch vụ Spring khác như ORM, bảo mật Spring và DI, cả hai đều là thư viện mùa xuân, vì vậy tôi cảm thấy dễ dàng một chút để quản lý mã và phụ thuộc

Ưu điểm của JAX-RS:

  • Tiêu chuẩn JSR có thể được chạy mà không cần thùng chứa servlet (đơn giản, đơn giản, ...)
  • Các triển khai sẵn sàng sản xuất (jersey, cxf, resteasy, restlet, ...) chỉ được thiết kế cho các ứng dụng REST

Ưu điểm MVC mùa xuân:

  • Cung cấp ngăn xếp "đầy đủ", không chỉ các tiện ích REST

  • Phụ thuộc tiêm / AOP / Giao dịch

  • Các mẫu xem có thể cắm được (JSP, freemarker, vận tốc, ...)

Bạn có thể kiểm tra thêm trên các liên kết sau

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. Tại sao nên sử dụng JAX-RS / Jersey?

4
Tuy nhiên, JAX-RS cũng có thể được sử dụng với Spring (đối với DI, AOP, ...).
deamon

5

JAX-RS là đặc điểm kỹ thuật và áo vv đang được thực hiện. Mọi người sử dụng Spring để tạo các dịch vụ web RestFul vì mùa xuân cùng với việc triển khai yên tĩnh cung cấp những thứ như tích hợp ngủ đông và cả những thứ như lập trình định hướng IOC và Aspect.

Trường hợp nếu chúng ta sử dụng áo để thực hiện thì vấn đề sẽ là dữ liệu phải được tìm nạp từ phía sau bằng cách sử dụng một số công nghệ ORM và chúng ta sẽ phải viết mã soạn sẵn cho cùng.

Đó là lý do mọi người và thậm chí các doanh nghiệp sử dụng mùa xuân cùng với việc thực hiện Rest, nó cũng cung cấp các cơ sở Spring. Và bây giờ bằng cách sử dụng triển khai khởi động Spring mới nhất, chúng ta có thể bắt đầu phát triển rất nhanh mà không cần nhiều cấu hình.

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.