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

35

Je commence un nouveau projet Java qui nécessitera une API RESTful. Ce sera une application professionnelle SaaS destinée aux clients mobiles.

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

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

À en juger par la liste de Wikipedia , les principaux concurrents semblent être Jersey, Apache CXF, RESTeasy et Restlet. Mais la comparaison des implémentations JAX-RS citées 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 laisse penser 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 constitue peut-être un bon choix, mais c’est un héritage de Sun et je ne sais pas comment Oracle le traite (la page d’annonces ne fonctionne pas et le dernier avis de validation date de 4 mois);
  • RESTeasy vient de JBoss et constitue probablement une option solide, bien que je ne sois pas sûr d'apprendre la courbe;
  • Restlet semble être populaire, mais il a beaucoup d’histoire. Je ne sais pas dans quelle mesure il est à jour dans le monde Java EE 6 ou s’il comporte un état d’esprit J2EE lourd (comme beaucoup de configuration XML).

Quels seraient les avantages de chacune de ces alternatives? Qu'en est-il de la courbe d'apprentissage? Support technique? Outils (par exemple, assistants NetBeans ou Eclipse)? Qu'en est-il de la facilité de débogage et du déploiement? Est-ce que l'un de ces projets est plus à jour que les autres? Dans quelle mesure sont-ils stables?

Fernando Correia
la source
1
J'apprécie la modification du titre, mais je ne demande pas vraiment si JAX-RS convient parfaitement à un projet mobile. ce serait une autre question. J'essaie de savoir quelle implémentation JAX-RS serait recommandée.
Fernando Correia

Réponses:

22

J'ai appris à aimer Dropwizard pour sa solution globale

Au lieu d’opter pour une approche de conteneur d’applications imposante, Dropwizard préconise une solution légère offrant des cycles de développement beaucoup plus rapides. Essentiellement, il fournit la colle pour les frameworks bien connus suivants:

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

La combinaison de ce qui précède, associée à une approche solide des tests fonctionnels, donne une solution complète pour rendre votre service opérationnel rapidement.

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

Vous remarquerez que leur choix était Jersey, la mise en œuvre de référence JAX-RS. Étant un gars de RESTEasy, je pensais que cela poserait un problème, mais la courbe d'apprentissage était nulle. Les deux sont largement interchangeables. Cependant, je dirais que le client Jersey offrait 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());

}
Gary Rowe
la source
2
Merci beaucoup d'avoir porté Dropwizard à mon attention. Je ne le savais pas et cela semble très bien répondre à mes besoins. Cela a l'air bien pensé, pratique et terre-à-terre et pourrait probablement me sauver beaucoup de peine en m'aidant à construire une solution bien meilleure que celle que je pourrais grâce à ma connaissance superficielle de la plate-forme Java EE. Et le fait de venir d’une entreprise prospère comme Yammer, qui dessert le marché des entreprises, est définitivement un atout. Encore une fois, merci beaucoup.
Fernando Correia
1
Aucun problème. J'ai blogué à propos d'un de mes projets qui illustre de nombreuses fonctionnalités de Dropwizard. Il est sous licence MIT alors n'hésitez pas à utiliser ce dont vous avez besoin: gary-rowe.com/agilestack/2012/06/06/…
Gary Rowe
Ça va aider. Très appréciée.
Fernando Correia
1
J'étais déjà enclin à utiliser Jackson, Guava, Validator et OAuth, donc cela ressemble à une évidence ... Merci.
PhiLho
Avertissement: Jersey 2.0 est nettement inférieur à 1.0. Il manque des fonctionnalités qui existaient dans la version 1.0, il vous impose un cadre d’ID spécifique et le soutien de la communauté est bien pire qu’il ne l’était auparavant.
Gili
6

Vous pouvez jeter un coup d'œil à cette question , qui traite de certaines expériences d'autres développeurs.

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

Oleksi
la source
1
Merci pour votre réponse utile et pour votre lien vers cette question connexe - étrangement, cela n’apparaissait pas dans la recherche . Cette réponse date d'il y a 4 ans, alors j'apprécie votre recommandation récente.
Fernando Correia