Yeni bir proje için bir JAX-RS uygulaması seçme


35

RESTful API gerektiren yeni bir Java projesine başlıyorum. Mobil müşterilere hizmet veren bir SaaS iş uygulaması olacak.

Java EE 6 ile bir proje geliştirdim, ancak deneyimimin çoğu Microsoft platformunda olduğu için ekosisteme pek aşina değilim.

Açıklandığı gibi yeni bir proje için JAX-RS uygulaması için mantıklı bir seçim hangisidir?

Bakılırsa Wikipedia'nın listesinde , ana aday Jersey, Apache CXF, RESTeasy ve Restlet görünmektedir. Ancak Wikipedia'da belirtilen JAX-RS Uygulamalarının Karşılaştırması 2008'den itibarendir.

Kendi ana sayfalarından ilk izlenimlerim şudur:

  • CXF (Microsoft alanındaki WCF'yi hatırlatıyor) çok kapsamlı bir çözüm olmayı hedefliyor, bu da bana ihtiyaç duyduğumdan daha anlaşılmanın, kurmanın ve hata ayıklamanın daha karmaşık olabileceğini düşünmemi sağlıyor;
  • Jersey referans uygulamasıdır ve iyi bir seçim olabilir, ancak Sun'ın eski mirasıdır ve Oracle'ın nasıl davrandığından emin değilim (duyuru sayfası çalışmıyor ve son işlem bildirimi 4 ay önceydi);
  • RESTeasy , JBoss'tan geliyor ve muhtemelen sağlam bir seçenektir, ancak öğrenme eğrisinden emin değilim;
  • Restlet popüler gibi görünüyor ama çok fazla geçmişi var, Java EE 6 dünyasında ne kadar güncel olduğundan ya da ağır bir J2EE zihniyetini taşıdığından (XML yapılandırması gibi) emin değilim.

Bu alternatiflerin her birinin yararı ne olurdu? Peki ya öğrenme eğrisi? Özellik desteği? Takım (örneğin NetBeans veya Eclipse sihirbazları)? Hata ayıklama kolaylığı ve ayrıca konuşlandırmaya ne dersiniz? Bu projelerden herhangi biri diğerlerinden daha güncel midir? Onlar ne kadar istikrarlı?


1
Başlık düzenlemeyi takdir ediyorum, ancak JAX-RS'in mobil bir projeye uygun olup olmadığını sormuyorum; bu başka bir soru olurdu. Hangi JAX-RS uygulamasının önerileceğini bulmaya çalışıyorum.
Fernando Correia

Yanıtlar:


22

Genel bir çözüm için Dropwizard'ı sevmeye büyüdüm .

Dropwizard, devasa bir uygulama kabı yaklaşımıyla gitmek yerine, çok daha hızlı geliştirme döngüleri sunan hafif bir çözümü savunuyor. Temel olarak, aşağıdaki iyi bilinen çerçeveler için yapıştırıcı sağlar:

  • İskelesi (HTTP)
  • Forma (JAX-RS)
  • Jackson (JSON veya XML)
  • Guava (JDK kütüphanelerine mükemmel eklemeler)
  • Metrikler (gerçek zamanlı uygulama izleme)
  • Hazırda Bekletme Validator (giriş doğrulama)
  • OAuth (RESTful kimlik doğrulama)

Yukarıdakilerin, fonksiyonel testlere katı bir yaklaşımla birleştiğinde, servisinizin hızlı bir şekilde çalışmasını sağlamak için eksiksiz bir çözüm sunar.

Evet? Ve sorduğum JAX-RS sorusu ...

Seçimlerinin Jersey, referans JAX-RS uygulaması olduğunu göreceksiniz. Bir RESTEasy adamı olmak bunun bir problem olacağını düşünmüştüm, fakat sıfır öğrenme eğrisi vardı. İki büyük ölçüde değiştirilebilir. Ancak, Jersey müşterisinin test yapmak için akıcı bir arayüz sunduğunu söyleyebilirim. Bir örnek olurdu ...

 @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
Dropwizard'ı dikkatime sunduğunuz için çok teşekkür ederim. Bunu bilmiyordum ve ihtiyaçlarıma çok iyi uyuyor gibi görünüyor. İyi düşünülmüş, pratik ve aşağıya doğru görünüyor ve Java EE platformu hakkında yüzeysel bilgilerimi verebileceğimden çok daha iyi bir çözüm geliştirmeme yardımcı olurken muhtemelen beni büyük sıkıntılardan kurtarabilir. Ve kurumsal pazara hizmet veren Yammer gibi başarılı bir şirketten gelmek kesinlikle bir artı. Yine çok teşekkürler.
Fernando Correia,

1
Sorun değil. Dropwizard özelliklerinin çoğunu gösteren bir projem hakkında blog yazdım. MIT lisansı altında olduğundan, istediğiniz kadar kullanmaktan çekinmeyin: gary-rowe.com/agilestack/2012/06/06/…
Gary Rowe

Bu yardımcı olacak. Çok takdir.
Fernando Correia,

1
Jackson, Guava, Validator ve OAuth'u kullanmaya çoktan eğildim, bu yüzden bu hiç akıllıca görünmüyor ... Teşekkürler.
PhiLho

Uyarı: Jersey 2.0, 1.0'dan çok daha kötü. 1.0'da var olan işlevsellikten yoksun, size belirli bir DI çerçevesini zorluyor ve topluluk desteği eskisinden çok daha kötü.
Gili

6

Diğer geliştiricilerin deneyimlerini tartışan bu soruya bakabilirsiniz .

Jersey'yi şahsen tavsiye edebilirim. Kullanımı çok kolaydır ve referans uygulaması olduğundan iyi bir takip vardır. Bu, bir sonraki küçük bir süre için muhafaza edileceği ve destekleneceği anlamına gelir.


1
Yararlı cevabınız için ve bu ilgili soruya bağlantı verdiğiniz için teşekkür ederiz - garip bir şekilde, aramada görünmedi . Bu cevap 4 yıl önceydi, bu yüzden güncel önerilerinizi takdir ediyorum.
Fernando Correia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.