Memilih implementasi JAX-RS untuk proyek baru

35

Saya memulai proyek Java baru yang akan membutuhkan API tenang. Ini akan menjadi aplikasi bisnis SaaS yang melayani klien seluler.

Saya telah mengembangkan satu proyek dengan Java EE 6, tetapi saya tidak terlalu akrab dengan ekosistem, karena sebagian besar pengalaman saya ada di platform Microsoft.

Mana yang akan menjadi pilihan yang masuk akal untuk implementasi JAX-RS untuk proyek baru seperti yang dijelaskan?

Dilihat dari daftar Wikipedia , pesaing utama tampaknya adalah Jersey, Apache CXF, RESTeasy dan Restlet. Tetapi Perbandingan Implementasi JAX-RS yang dikutip di Wikipedia adalah dari 2008.

Kesan pertama saya dari beranda masing-masing adalah:

  • CXF bertujuan untuk menjadi solusi yang sangat komprehensif (mengingatkan saya pada WCF di ruang Microsoft), yang membuat saya berpikir akan lebih kompleks untuk memahami, mengatur dan men-debug daripada yang saya butuhkan;
  • Jersey adalah implementasi referensi dan mungkin merupakan pilihan yang baik, tetapi ini adalah warisan dari Sun dan saya tidak yakin bagaimana Oracle memperlakukannya (halaman pengumuman tidak berfungsi dan pemberitahuan komit terakhir dari 4 bulan lalu);
  • RESTeasy berasal dari JBoss dan mungkin merupakan opsi yang solid, meskipun saya tidak yakin tentang kurva pembelajaran;
  • Restlet tampaknya populer tetapi memiliki banyak sejarah, saya tidak yakin seberapa mutakhirnya di dunia Java EE 6 atau jika ia membawa pola pikir J2EE yang berat (seperti banyak konfigurasi XML).

Apa manfaat dari masing-masing alternatif ini? Bagaimana dengan kurva belajar? Dukungan fitur? Tooling (mis. NetBeans atau Eclipse wizards)? Bagaimana dengan kemudahan debugging dan juga penyebaran? Apakah ada di antara proyek ini yang lebih mutakhir daripada yang lain? Seberapa stabil mereka?

Fernando Correia
sumber
1
Saya menghargai edit judul, tapi saya tidak benar-benar bertanya apakah JAX-RS cocok untuk proyek seluler; itu akan menjadi pertanyaan lain. Saya mencoba mencari tahu implementasi JAX-RS mana yang akan direkomendasikan.
Fernando Correia

Jawaban:

22

Saya telah tumbuh untuk mencintai Dropwizard untuk solusi keseluruhan

Daripada menggunakan pendekatan wadah aplikasi yang besar, Dropwizard menganjurkan solusi ringan yang menawarkan siklus pengembangan yang jauh lebih cepat. Pada dasarnya, ini memberikan lem untuk kerangka kerja terkenal berikut:

  • Jetty (HTTP)
  • Jersey (JAX-RS)
  • Jackson (JSON atau XML)
  • Jambu (tambahan yang sangat baik untuk perpustakaan JDK)
  • Metrik (pemantauan aplikasi waktu nyata)
  • Validator Hibernate (verifikasi input)
  • OAuth (otentikasi tenang)

Kombinasi hal di atas, ditambah dengan pendekatan yang kuat untuk pengujian fungsional, memberikan solusi lengkap untuk membuat layanan Anda berjalan dengan cepat.

Ya? Dan pertanyaan JAX-RS yang saya tanyakan ...

Anda akan melihat bahwa pilihan mereka adalah Jersey, referensi implementasi JAX-RS. Menjadi seorang pria yang RESTEasy saya pikir ini akan menjadi masalah, tetapi tidak ada kurva belajar. Keduanya sebagian besar dipertukarkan. Namun, saya akan mengatakan bahwa klien Jersey menawarkan antarmuka yang lancar untuk membuat tes. Contohnya adalah ...

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

}
Gary Rowe
sumber
2
Terima kasih banyak telah membawa Dropwizard ke perhatian saya. Saya tidak tahu tentang hal itu dan tampaknya sangat sesuai dengan kebutuhan saya. Itu terlihat dipikirkan dengan baik, praktis dan sederhana dan mungkin bisa menyelamatkan saya dari banyak masalah sambil membantu saya membangun solusi yang jauh lebih baik daripada yang saya bisa berikan pengetahuan dangkal saya tentang platform Java EE. Dan datang dari perusahaan yang sukses seperti Yammer yang melayani pasar korporat jelas merupakan nilai tambah. Sekali lagi, terima kasih banyak.
Fernando Correia
1
Tidak masalah. Saya telah membuat blog tentang proyek saya yang menunjukkan banyak fitur Dropwizard. Ini di bawah lisensi MIT jadi jangan ragu untuk menggunakan sesuai kebutuhan Anda: gary-rowe.com/agilestack/2012/06/06/…
Gary Rowe
Itu akan membantu. Sangat dihargai.
Fernando Correia
1
Saya sudah condong ke arah menggunakan Jackson, Guava, Validator dan OAuth, jadi ini terlihat seperti tidak punya otak ... Terima kasih.
PhiLho
Peringatan: Jersey 2.0 jauh lebih buruk daripada 1.0. Ini tidak memiliki fungsionalitas yang dulu ada di 1.0, itu memaksa kerangka DI tertentu pada Anda, dan dukungan komunitas jauh lebih buruk daripada dulu.
Gili
6

Anda dapat melihat pertanyaan ini , yang membahas beberapa pengalaman dari pengembang lain.

Saya pribadi dapat merekomendasikan Jersey. Ini sangat mudah digunakan, dan memiliki pengikut yang baik karena ini adalah implementasi referensi. Ini juga berarti bahwa itu akan dipertahankan dan didukung untuk sementara waktu.

Oleksi
sumber
1
Terima kasih atas jawaban bermanfaat Anda dan untuk menghubungkan ke pertanyaan terkait - anehnya, itu tidak muncul dalam pencarian . Namun, jawaban itu dari 4 tahun yang lalu, jadi saya menghargai rekomendasi Anda yang terbaru.
Fernando Correia