Perbedaan antara JAX-RS dan Spring Rest

138

Saya bingung dengan perbedaan antara JAX-RS (well, mungkin harus menggunakan Jersey untuk melakukan perbandingan karena JAX-RS hanya spec) dan Spring for Restful services . Saya mencoba mencari lebih banyak informasi online dan itu menjadi lebih membingungkan. Perusahaan saya menggunakan Spring MVC untuk mengembangkan Restful APIs

Bagian yang membingungkan adalah, JAX-RS singkatan dari Java API untuk RESTful Web Services , di Spring saya juga menggunakan java untuk mengembangkan RESTful Web Services, jadi saya tidak benar-benar mendapatkan perbedaan. Apakah Spring mengikuti spesifikasi JAX-RS?

Dari apa yang saya ketahui sampai sekarang:

  1. JAX-RS adalah cetak biru / spesifikasi, memiliki Jersey, RESTeasy, dll sebagai implementasi.
neraka
sumber
@ CássioMazzochiMolin terima kasih atas jawaban Anda, saya akan menerimanya sebentar lagi, satu pertanyaan lagi, Anda menyebutkan bahwa Kerangka Kerja Spring bukan implementasi JAX-RS, spesifikasi mana yang diikuti oleh Spring? Terima kasih
hades
3
Itu tidak menerapkan spesifikasi tertentu. Ini hanya cara Spring melakukan hal-hal. Kemampuan REST disediakan oleh spring-webmvcmodul yang juga menyediakan model-view-controller Spring.
cassiomolin

Jawaban:

150

JAX-RS

JAX-RS adalah spesifikasi untuk mengimplementasikan layanan web REST di Jawa, yang saat ini ditentukan oleh JSR-370 . Ini adalah bagian dari teknologi Java EE , saat ini didefinisikan oleh JSR 366 .

Jersey (dikirim dengan GlassFish dan Payara) adalah implementasi referensi JAX-RS, namun ada implementasi lain seperti RESTEasy (dikirimkan dengan JBoss EAP dan WildFly) dan Apache CXF (dikirimkan dengan TomEE dan WebSphere).

Kerangka Pegas

The Spring Framework adalah kerangka kerja penuh yang memungkinkan Anda untuk membuat aplikasi perusahaan Java. Kemampuan REST disediakan oleh modul Spring MVC (modul yang sama yang menyediakan kemampuan model-view-controller ). Ini bukan implementasi JAX-RS dan dapat dilihat sebagai alternatif Spring untuk standar JAX-RS.

Ekosistem Spring juga menyediakan berbagai proyek untuk membuat aplikasi perusahaan, yang meliputi ketekunan, keamanan, integrasi dengan jejaring sosial, pemrosesan batch, dll.

Contohnya

Pertimbangkan pengontrol sumber daya berikut menggunakan 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();
    }
}

Implementasi yang setara menggunakan API Spring MVC adalah:

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

Menggunakan Spring Boot dan Jersey

Spring Boot menyediakan spring-boot-starter-jerseymodul yang memungkinkan Anda menggunakan model pemrograman JAX-RS untuk titik akhir REST alih-alih Spring MVC. Ini bekerja cukup baik dengan Jersey 2.x.

Untuk contoh lengkap membuat aplikasi web dengan Jersey 2.x dan Spring Boot 1.4.x, lihat jawaban ini .

cassiomolin
sumber
Jadi jika kita menggunakan pegas MVC dan menempatkannya di GlassFish / Payara, apakah kita perlu menonaktifkan implementasi jax-rs di server?
Pradeep_Evol
apakah artikel ini benar dengan pegas 4 dzone.com/articles/… ? bahwa web pegas lebih baik untuk membuat layanan web resT daripada hanya pegas + Jersey (JAX-RS)?
tgkprog
58

Perbedaan anotasi

(Pada 2018) Spring MVC belum distandarisasi untuk anotasi JAX-RS, karena solusinya lebih dulu dari JAX-RS. Berikut adalah padanannya:

masukkan deskripsi gambar di sini

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

Jika Anda menggunakan API yang tidak terstandarisasi, Anda harus mengharapkannya tidak digunakan lagi dan mungkin digantikan oleh API eksperimental yang lebih baru dalam beberapa tahun. Ada jauh lebih sedikit akuntabilitas untuk kompatibilitas mundur (misalnya ketika versi JDK baru dirilis).

Sridhar Sarnobat
sumber
Terima kasih banyak, ini luar biasa
Bejond
26

Saya bekerja dengan Jersey Rest, spring rest dan Jersey Rest dengan spring. Keduanya merupakan kerangka kerja yang sangat kaya dengan implementasi yang bagus. Saya akan menyarankan lebih baik untuk pergi dengan Spring rest jika Anda menggunakan layanan Spring lainnya seperti ORM, Spring security dan DI dll. Keduanya adalah spring library, jadi saya merasa sedikit mudah untuk mengelola kode dan dependensi

JAX-RS pro:

  • Standar JSR dapat dijalankan tanpa wadah servlet (grizzly, simple, ...)
  • Implementasi siap produksi (jersey, cxf, resteasy, restlet, ...) dirancang hanya untuk aplikasi REST

Pro musim semi MVC:

  • Berikan tumpukan "penuh", bukan hanya fasilitas REST

  • Injeksi ketergantungan / AOP / Transaksi

  • Templat tampilan Pluggable (JSP, freemarker, velocity, ...)

Anda dapat memeriksa lebih lanjut tentang tautan berikut

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. Mengapa menggunakan JAX-RS / Jersey?
Midhun Pottammal
sumber
4
Namun, JAX-RS dapat digunakan dengan Spring (untuk DI, AOP, ...) juga.
deamon
5

JAX-RS adalah spesifikasi dan jersey dll adalah implementasinya. Orang-orang menggunakan Spring untuk membuat RestFul web Services karena Spring bersama dengan implementasi yang tenang menyediakan hal-hal seperti integrasi hibernate dan juga hal-hal seperti IOC dan pemrograman berorientasi Aspect.

Sedangkan seolah-olah kita menggunakan jersey untuk implementasi, masalahnya adalah data harus diambil dari belakang menggunakan beberapa teknologi ORM dan kita harus menulis kode boilerplate untuk hal yang sama.

Itulah alasan orang dan bahkan perusahaan menggunakan pegas seiring dengan implementasi Istirahat itu juga menyediakan fasilitas Pegas. Dan sekarang menggunakan implementasi Spring boot terbaru kita dapat memulai pengembangan dengan sangat cepat tanpa banyak konfigurasi.

Rahul Singh
sumber