ความแตกต่างระหว่าง JAX-RS และ Spring Rest


151

ฉันสับสนกับความแตกต่างระหว่างJAX-RS (ดีอาจจะควรใช้ย์จะทำเปรียบเทียบตั้งแต่ JAX-RS เป็นข้อมูลจำเพาะแค่) และฤดูใบไม้ผลิสำหรับการให้บริการพักผ่อน ฉันพยายามค้นหาข้อมูลเพิ่มเติมทางออนไลน์และเกิดความสับสนมากขึ้น บริษัท ของฉันใช้ Spring MVC เพื่อพัฒนา Restful API

ส่วนที่ทำให้เกิดความสับสนคือ JAX-RS ย่อมาจากJava API สำหรับ RESTful Web Servicesในฤดูใบไม้ผลิฉันยังใช้ java เพื่อพัฒนา RESTful Web Services ดังนั้นฉันจึงไม่ได้รับความแตกต่าง Spring เป็นไปตามข้อกำหนด JAX-RS หรือไม่

จากสิ่งที่ฉันรู้จนถึงตอนนี้:

  1. JAX-RS เป็นพิมพ์เขียว / ข้อกำหนดมี Jersey, RESTeasy และอื่น ๆ เป็นการนำไปใช้งาน

@ CássioMazzochiMolinขอบคุณสำหรับคำตอบของคุณฉันจะยอมรับคำถามนี้ในอีกสักครู่หนึ่งคำถามที่คุณพูดถึงว่า The Spring Framework ไม่ใช่การใช้งาน JAX-RS ข้อกำหนดใดที่ Spring ต่อไปนี้ ขอบคุณ
hades

3
ไม่ใช้ข้อกำหนดเฉพาะใด ๆ มันเป็นเพียงวิธีฤดูใบไม้ผลิในการทำสิ่งต่างๆ ความสามารถของ REST จัดเตรียมโดยspring-webmvcโมดูลที่มี model-view-controller ของ Spring ด้วย
Cassiomolin

คำตอบ:


160

JAX-RS

JAX-RS เป็นข้อกำหนดสำหรับการใช้บริการเว็บ REST ใน Java กำหนดไว้ในปัจจุบันโดยJSR-370 มันเป็นส่วนหนึ่งของเทคโนโลยี Java EEที่กำหนดไว้ในขณะนี้โดยJSR 366

Jersey (มาพร้อมกับ GlassFish และ Payara) เป็นการนำไปใช้อ้างอิง JAX-RS อย่างไรก็ตามมีการใช้งานอื่น ๆ เช่นRESTEasy (มาพร้อมกับ JBoss EAP และ WildFly) และApache CXF (มาพร้อมกับ TomEE และ WebSphere)

กรอบสปริง

ฤดูใบไม้ผลิกรอบเป็นกรอบการทำงานเต็มรูปแบบที่ช่วยให้คุณสามารถสร้างโปรแกรมประยุกต์ขององค์กร Java ความสามารถ REST จัดเตรียมโดยโมดูลSpring MVC (โมดูลเดียวกับที่มีความสามารถในการดูโมเดลคอนโทรลเลอร์ ) ไม่ใช่การใช้งาน JAX-RS และสามารถมองว่าเป็นทางเลือกของ Spring สำหรับมาตรฐาน 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 และ Jersey

Spring Boot มีspring-boot-starter-jerseyโมดูลที่อนุญาตให้คุณใช้โมเดลการเขียนโปรแกรม JAX-RS สำหรับจุดสิ้นสุด REST แทน Spring MVC ใช้งานได้ดีกับ Jersey 2.x.

สำหรับตัวอย่างที่สมบูรณ์ของการสร้างเว็บแอปพลิเคชันด้วย Jersey 2.x และ Spring Boot 1.4.x โปรดดูคำตอบนี้


ดังนั้นหากเราใช้สปริง MVC และนำไปใช้ใน GlassFish / Payara เราจำเป็นต้องปิดการใช้งาน jax-rs ในเซิร์ฟเวอร์หรือไม่?
Pradeep_Evol

บทความนี้จริงไหมกับสปริง 4 dzone.com/articles/… ? เว็บสปริงนั้นดีกว่าในการสร้างบริการเว็บ resT มากกว่าแค่ spring + Jersey (JAX-RS)?
tgkprog

63

ความแตกต่างของคำอธิบายประกอบ

(ณ ปี 2018) Spring MVC ยังไม่ได้มาตรฐานสำหรับคำอธิบายประกอบ JAX-RS เนื่องจากโซลูชันของมันมาก่อน JAX-RS นี่คือสิ่งที่เทียบเท่า:

ป้อนคำอธิบายภาพที่นี่

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

หากคุณใช้ API ที่ไม่ได้มาตรฐานคุณควรคาดหวังว่า API เหล่านี้จะเลิกใช้งานและอาจถูกแทนที่ด้วย API รุ่นทดลองที่ใหม่กว่าในอีกไม่กี่ปี มีความรับผิดชอบน้อยกว่ามากสำหรับความเข้ากันได้แบบย้อนหลัง (เช่นเมื่อมีการเปิดตัว JDK เวอร์ชันใหม่)


28

ฉันทำงานร่วมกับทั้ง Jersey Rest, Spring rest และ Jersey Rest ในฤดูใบไม้ผลิ ทั้งสองเป็นกรอบที่สมบูรณ์มากพร้อมการใช้งานที่ดี ฉันขอแนะนำให้ใช้ Spring rest จะดีกว่าถ้าคุณใช้บริการ Spring อื่น ๆ เช่น ORM, Spring security และ DI เป็นต้นทั้งสองเป็นห้องสมุดฤดูใบไม้ผลิดังนั้นฉันจึงรู้สึกง่ายเล็กน้อยในการจัดการรหัสและการอ้างอิง

ข้อดีของ JAX-RS:

  • มาตรฐาน JSR สามารถรันได้โดยไม่ต้องใช้คอนเทนเนอร์ servlet (grizzly, simple, ... )
  • การใช้งานที่พร้อมสำหรับการผลิต (jersey, cxf, resteasy, restlet, ... ) ออกแบบมาสำหรับการใช้งาน REST เท่านั้น

ข้อดีของ Spring MVC:

  • จัดเตรียมสแต็ก "เต็ม" ไม่ใช่แค่สิ่งอำนวยความสะดวก REST

  • การพึ่งพาการฉีด / AOP / ธุรกรรม

  • เทมเพลตมุมมองที่เสียบได้ (JSP, freemarker, velocity, ... )

คุณสามารถตรวจสอบเพิ่มเติมได้ที่ลิงค์ต่อไปนี้

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. ทำไมต้องใช้ JAX-RS / Jersey?

4
อย่างไรก็ตาม JAX-RS สามารถใช้กับ Spring (สำหรับ DI, AOP, ... ) ได้เช่นกัน
deamon

6

JAX-RS เป็นสเปคและเจอร์ซีย์ ฯลฯ เป็นการนำไปใช้ ผู้คนใช้ Spring เพื่อสร้าง RestFul Web Services เนื่องจากฤดูใบไม้ผลิพร้อมกับการใช้งานที่เงียบสงบทำให้มีสิ่งต่างๆเช่นการรวมไฮเบอร์เนตและสิ่งต่างๆเช่น IOC และการเขียนโปรแกรมเชิง Aspect

ในกรณีที่เราใช้เจอร์ซีย์สำหรับการใช้งานของเราปัญหาจะเป็นข้อมูลที่ต้องดึงมาจากส่วนหลังโดยใช้เทคโนโลยี ORM และเราจะต้องเขียนโค้ดสำเร็จรูปสำหรับสิ่งเดียวกัน

นั่นคือเหตุผลที่ผู้คนและแม้แต่องค์กรต่างๆใช้สปริงควบคู่ไปกับการใช้งานส่วนที่เหลือจึงมีสิ่งอำนวยความสะดวกในฤดูใบไม้ผลิด้วย และตอนนี้การใช้ Spring boot ล่าสุดเราสามารถเริ่มการพัฒนาได้อย่างรวดเร็วโดยไม่ต้องกำหนดค่ามากมาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.