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

35

Sto avviando un nuovo progetto Java che richiederà un'API RESTful. Sarà un'applicazione aziendale SaaS che serve 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 si trova sulla piattaforma Microsoft.

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

A giudicare da elenco di Wikipedia , i principali contendenti sembrano essere Jersey, Apache CXF, RESTeasy e Restlet. Ma il Confronto delle implementazioni JAX-RS citato su Wikipedia è del 2008.

Le mie prime impressioni dalle rispettive home page sono:

  • CXF si propone di essere una soluzione molto completa (mi ricorda WCF nello spazio Microsoft), il che mi fa pensare che sia più complesso capire, configurare e eseguire il debug di quanto mi serve;
  • Jersey è l'implementazione di riferimento e potrebbe essere una buona scelta, ma è legacy di Sun e non sono sicuro di come lo tratti Oracle (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 un sacco di storia, non sono sicuro di quanto sia aggiornato nel mondo Java EE 6 o se ha una pesante mentalità J2EE (come un sacco di Configurazione XML).

Quali sarebbero i pregi di ciascuna di queste alternative? Che dire della curva di apprendimento? Supporto di funzionalità? Tooling (ad esempio, procedure guidate di NetBeans o Eclipse)? Che ne dici di facilità di debug e di implementazione? Qualcuno di questi progetti è più aggiornato degli altri? Quanto sono stabili?

    
posta Fernando Correia 03.07.2012 - 19:52
fonte

2 risposte

22

Ho imparato ad amare Dropwizard per una soluzione generale

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

  • Jetty (HTTP)
  • Jersey (JAX-RS)
  • Jackson (JSON o XML)
  • Guava (eccellenti aggiunte alle librerie JDK)
  • Metriche (monitoraggio dell'applicazione in tempo reale)
  • Hibernate Validator (verifica dell'input)
  • OAuth (autenticazione RESTful)

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

Sì? E la domanda JAX-RS che ho chiesto ...

Noterai che la loro scelta era Jersey, l'implementazione JAX-RS di riferimento. Essendo un ragazzo RESTEasy ho pensato che questo sarebbe stato un problema, ma c'era una curva di apprendimento pari a zero. I due sono in gran parte intercambiabili. Tuttavia, direi che il cliente di Jersey offriva un'interfaccia fluente 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());

}
    
risposta data 04.07.2012 - 16:44
fonte
6

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

Personalmente posso raccomandare Jersey. È molto facile da usare e ha un buon seguito perché è l'implementazione di riferimento. Ciò significa anche che verrà mantenuto e supportato per il prossimo poco tempo.

    
risposta data 03.07.2012 - 20:00
fonte

Leggi altre domande sui tag