web-dev-qa-db-fra.com

Sélection d'une implémentation JAX-RS pour un nouveau projet

Je démarre un nouveau projet Java qui nécessitera une API RESTful. Ce sera une application métier SaaS au service des clients mobiles).

J'ai développé un projet avec Java EE 6, mais je ne connais pas très bien l'écosystème, car la plupart de mon expérience est sur la plate-forme Microsoft.

Quel serait un choix judicieux pour une implémentation JAX-RS pour un nouveau projet tel que décrit?

A en juger par liste de Wikipedia , les principaux prétendants semblent être Jersey, Apache CXF, RESTeasy et Restlet. Mais le Comparaison des implémentations JAX-RS cité sur Wikipedia date de 2008.

Mes premières impressions de leurs pages d'accueil respectives sont les suivantes:

  • [~ # ~] cxf [~ # ~] vise à être une solution très complète (me rappelle WCF dans l'espace Microsoft), ce qui me fait pense qu'il peut être plus complexe à comprendre, à configurer et à déboguer que ce dont j'ai besoin;
  • Jersey est l'implémentation de référence et pourrait être un bon choix, mais c'est un héritage de Sun et je ne sais pas comment Oracle le traite (la page des annonces ne fait pas 't work and last commit notice is from 4 months ago);
  • RESTeasy est de JBoss et probablement une option solide, bien que je ne sois pas sûr de la courbe d'apprentissage;
  • Restlet semble être populaire mais a beaucoup d'histoire, je ne sais pas à quel point il est à jour dans le Java monde EE 6 ou s'il porte un état d'esprit J2EE lourd (comme beaucoup de configuration XML).

Quels seraient les mérites de chacune de ces alternatives? Qu'en est-il de la courbe d'apprentissage? Prise en charge des fonctionnalités? Outillage (par exemple, les assistants NetBeans ou Eclipse)? Qu'en est-il de la facilité de débogage et du déploiement? Certains de ces projets sont-ils plus à jour que les autres? Dans quelle mesure sont-ils stables?

35
Fernando Correia

J'ai appris à aimer Dropwizard pour une solution globale

Plutôt que d'adopter une approche de conteneur d'applications énorme, Dropwizard préconise une solution légère qui offre des cycles de développement beaucoup plus rapides. Essentiellement, il fournit la colle pour les cadres bien connus suivants:

  • Jetée (HTTP)
  • Maillot (JAX-RS)
  • Jackson (JSON ou XML)
  • Goyave (excellents ajouts aux bibliothèques JDK)
  • Mesures (surveillance des applications en temps réel)
  • Hibernate Validator (vérification des entrées)
  • OAuth (authentification RESTful)

La combinaison de ce qui précède, associée à une approche solide des tests fonctionnels, offre une solution complète pour mettre rapidement en service votre service.

Ouais? Et la question JAX-RS que j'ai posée ...

Vous remarquerez que leur choix s'est porté sur Jersey, l'implémentation de référence JAX-RS. Étant un gars RESTEasy, je pensais que ce serait un problème, mais il n'y avait aucune courbe d'apprentissage. Les deux sont largement interchangeables. Cependant, je dirais que le client Jersey a offert une interface fluide pour la construction de tests. Un exemple serait ...

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

}
22
Gary Rowe

Vous pouvez jeter un oeil à cette question , qui décrit certaines expériences d'autres développeurs.

Je peux personnellement recommander Jersey. Il est très facile à utiliser et a un bon suivi car c'est l'implémentation de référence. Cela signifie également qu'il sera maintenu et pris en charge pour le prochain instant.

6
Oleksi