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:
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?
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:
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());
}
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.