Selezione di un'implementazione JAX-RS per un nuovo progetto


35

Sto iniziando un nuovo progetto Java che richiederà un'API RESTful. Sarà un'applicazione aziendale SaaS al servizio dei client mobili.

Ho sviluppato un progetto con Java EE 6, ma non ho molta familiarità con l'ecosistema, poiché la maggior parte della mia esperienza è sulla piattaforma Microsoft.

Quale sarebbe una scelta sensata per un'implementazione JAX-RS per un nuovo progetto come quello descritto?

A giudicare dall'elenco di Wikipedia , i principali contendenti sembrano essere Jersey, Apache CXF, RESTeasy e Restlet. Ma il confronto tra le implementazioni JAX-RS citate su Wikipedia è del 2008.

Le mie prime impressioni dalle rispettive homepage sono:

  • CXF mira ad essere una soluzione molto completa (mi ricorda WCF nello spazio Microsoft), il che mi fa pensare che possa essere più complesso da capire, configurare e eseguire il debug di quello di cui ho bisogno;
  • Jersey è l'implementazione di riferimento e potrebbe essere una buona scelta, ma è un'eredità di Sun e non sono sicuro di come Oracle la stia trattando (la pagina degli annunci non funziona e l'ultima notifica di commit è di 4 mesi fa);
  • RESTeasy è di JBoss e probabilmente un'opzione solida, anche se non sono sicuro della curva di apprendimento;
  • Restlet sembra essere popolare ma ha molta storia, non sono sicuro di quanto sia aggiornato nel mondo Java EE 6 o se abbia una mentalità J2EE pesante (come molta configurazione XML).

Quali sarebbero i meriti di ciascuna di queste alternative? Che dire della curva di apprendimento? Supporto alle funzionalità? Tooling (ad es. Maghi NetBeans o Eclipse)? Che dire della facilità di debug e anche della distribuzione? Qualcuno di questi progetti è più aggiornato degli altri? Quanto sono stabili?


1
Apprezzo la modifica del titolo, ma non sto davvero chiedendo se JAX-RS sia adatto per un progetto mobile; sarebbe un'altra domanda. Sto cercando di scoprire quale implementazione JAX-RS sarebbe consigliata.
Fernando Correia,

Risposte:


22

Ho imparato ad amare Dropwizard per una soluzione globale

Piuttosto che andare con un enorme approccio al contenitore di applicazioni, Dropwizard sostiene una soluzione leggera che offre cicli di sviluppo molto più veloci. In sostanza, fornisce la colla per i seguenti quadri ben noti:

  • Jetty (HTTP)
  • Jersey (JAX-RS)
  • Jackson (JSON o XML)
  • Guava (eccellenti aggiunte alle librerie JDK)
  • Metriche (monitoraggio delle applicazioni in tempo reale)
  • Convalida ibernazione (verifica input)
  • OAuth (autenticazione RESTful)

La combinazione di quanto sopra, unita a un solido approccio ai test funzionali, offre una soluzione completa per rendere rapidamente operativo il tuo servizio.

Si? E la domanda JAX-RS che ho posto ...

Noterai che la loro scelta è stata Jersey, l'implementazione di riferimento JAX-RS. Essendo un ragazzo RESTEasy ho pensato che questo sarebbe stato un problema, ma non c'era curva di apprendimento zero. I due sono ampiamente intercambiabili. Tuttavia, direi che il client Jersey ha offerto un'interfaccia fluida per la costruzione di test. Un esempio potrebbe essere ...

 @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
Grazie mille per aver portato Dropwizard alla mia attenzione. Non lo sapevo e sembra adattarsi molto bene alle mie esigenze. Sembra ben ponderato, pratico e pratico e probabilmente potrebbe salvarmi molti problemi mentre mi aiuta a costruire una soluzione molto migliore di quella che potrei dare la mia conoscenza superficiale della piattaforma Java EE. E provenire da un'azienda di successo come Yammer che serve il mercato aziendale è sicuramente un vantaggio. Ancora molte grazie.
Fernando Correia,

1
Nessun problema. Ho scritto un blog su un mio progetto che dimostra molte delle funzionalità di Dropwizard. È sotto licenza MIT quindi sentiti libero di usare di cui hai bisogno: gary-rowe.com/agilestack/2012/06/06/…
Gary Rowe

Questo ti aiuterà. Molto apprezzato.
Fernando Correia,

1
Mi stavo già proponendo di usare Jackson, Guava, Validator e OAuth, quindi sembra un gioco da ragazzi ... Grazie.
PhiLho,

Avvertenza: Jersey 2.0 è sostanzialmente peggiore di 1.0. Manca la funzionalità che esisteva in 1.0, impone uno specifico framework DI su di te e il supporto della community è molto peggio di prima.
Gili,

6

Puoi dare un'occhiata a questa domanda , che discute alcune esperienze di altri sviluppatori.

Posso consigliare personalmente Jersey. È molto facile da usare e ha un buon seguito perché è l'implementazione di riferimento. Questo significa anche che verrà mantenuto e supportato per il prossimo momento.


1
Grazie per la tua risposta utile e per il collegamento a quella domanda correlata - stranamente, non è stato visualizzato nella ricerca . Quella risposta è di 4 anni fa, quindi apprezzo la tua raccomandazione aggiornata.
Fernando Correia,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.