Pourquoi utiliser un cadre pour les services RESTful en Java à la place de la vanille, des servlets
Je sais qu'il y a quelques questions concernant les bibliothèques que vous pouvez utiliser pour faire RESTful services en Java, mais quelle est la valeur de l'aide contre la vanille implémentations. Je veux dire, si je cherchais à créer l'url de la structure décrite par Wim
- www.example.com/images
- www.example.com/images/id/num
- www.example.com/images/tag/num
- www.example.com/images/tag/num/num/num
Ne serait-il pas plus facile (pour les développeurs) et plus rapide (à mettre en œuvre et d'apprendre) à la carte le modèle d'url /images à une servlet et ont une ligne ou deux qui analyse les url pour les paramètres au lieu de l'apprentissage, de la mise en œuvre et la configuration de l'une de ces bibliothèques pour le faire pour vous.
- Apache CXF
- Jersey (populaire)
- Restlet (pionnier de JAX-RS)
- RESTEasy
Essentiellement ce que je demande, c'est... qu'est-Ce que la valeur à l'aide d'un Réparateur de framework Java? Ne serait-il pas l'ajout de beaucoup de complexité, dans la mise en œuvre, pour un simple problème?
EDIT: Ce maillot de code est géré très proprement et tout le monde devrait savoir comment le faire dans le servlet si elles sont à la recherche dans les bibliothèques de le faire pour eux.
@Path("/helloworld")
public class HelloWorldResource {
//The Java method will process HTTP GET requests
@GET
//The Java method will produce content identified by the MIME Media
//type "text/plain"
@Produces("text/plain")
public String helloWorld() {
//Return some cliched textual content
return "Hello World";
}
}
Si tout ce que vous allez faire, c'est un "service" qui retourne le texte qui est piloté par des paramètres d'URL, donc, le texte brut renvoie, est un cadre nécessaire?
- Fait de Jersey est l'implémentation de référence de JAX-RS. Donc, je l'appellerais le pionnier, pas Restlet.
- Votre edit rend votre question réponse elle-même. Si vous voulez juste dire "Hello World", vous n'avez pas besoin de JAX-RS. Mais qui veut juste pour le faire?
- Je devrais avoir référencé wikipedia là, personnellement, je me méfie d'appeler les choses pionniers
- Si c'est “tous” vous êtes en train de faire, pourquoi s'embêter avec des servlets à tous? Après tout, avec que vous ne devriez pas être en train de changer tout état de n'importe où (enfin, pas d'état digne de ce nom; les journaux de serveur ne comptent pas).
- Donal je ne suis pas... Ce qui traite la requête GET, alors?
Vous devez vous connecter pour publier un commentaire.
Plus facile? Ce n'est certainement pas plus facile d'écrire — ce que vous avez à faire tout le chemin de l'extraction de vous-même et toutes les méthodes de manipulation et de tous les type de contenu de la négociation (en les deux les directions) et de tous les gestion des cookies et de la désérialisation des objets/de sérialisation des thunks et ... eh bien, beaucoup de bas niveau de stuff qui aurait tous besoin de test et de débogage ou plus facile à maintenir car JAX-RS interface vous permet de fonctionner à un niveau de ressources (naturelles caractérisation des Reposante webapps) au lieu de la demande; avec beaucoup d'expérience, l'entretien est plus facile lorsque l'écart entre le modèle conceptuel et la mise en œuvre est la plus petite. Il n'est pas non plus rapides à mettre en œuvre (en raison du faible niveau des implémentations de JAX-RS ont déjà été testés et corrigés pour vous; de moins en moins à faire pour vous) et le coût de l'apprentissage, il n'est pas très élevé car il est essentiellement déclarative de l'API avec très peu de surprises.
OK, ces avantages pourraient ne pas sembler tellement quand vous êtes seulement à faire avec de simples webapps. Après tout, vous pouvez pirater quelque chose en très peu de temps et de mettre l'résultant de lash en ligne. Vous aurez alors à prier que vous avez obtenu ce droit, sans inattendus avenues pour les exploits ou de déni de service attaques. Et la maintenance des programmeurs auront à comprendre tout ce que ces expressions vous avez pulvérisé par le code de la faire (Bonne Chance!) lors de l'ajout de petites fonctionnalités ou corriger des bugs. Mais comme la webapp devient plus grand, l'avantage d'avoir testé la bibliothèque pour gérer tout le bas niveau des trucs vraiment l'emporter.
(Avant de vous demander, certaines bibliothèques que vous mentionnez va gaiement installer eux-mêmes comme les servlets; cela permet à votre code à décrire la logique métier de la servlet et de déclarer comment la cartographie pour le fil est fait en termes abstraits. C'est juste énormément plus facile.)
JAX-RS est très bien conçu API qui permet la cartographie des requêtes HTTP à des méthodes, de l'extraction de paramètres à partir de différentes parties d'une requête HTTP, gestion de contenu de la négociation, et de nombreux autres pays à faible niveau de tâches très facile.
À l'aide de JAX-RS, principalement par le biais de Apache CXF, pendant près de deux ans maintenant, j'avais toujours la préfère sur la plaine de Servlets.
Cadres sont utilisés pour vous rendre la tâche plus facile. je suis d'accord que l'on peut faire la même chose par la mise en œuvre de servlets et ensuite d'analyser l'url, puis de mettre en œuvre la logique de base.
Bu, si vous êtes en utilisant des framework comme jersey alors u n'avez pas à vous soucier de ceux analyse des modèles et d'autres tâches similaires. ServletContainer classe prendra soin de cela (l'analyse des url dans sa méthode de service) et il y a beaucoup d'autres classes aussi qui rendra votre tâche plus facile.
Et une chose de plus que nous en prenons qu'un seul scénario (filtres), mais lorsque nos besoins vont croître le même code écrit par nos servlets deviendra de plus en plus compliquée et complexe.
Je voudrais aller avec l'aide de Jersey ou une bibliothèque dans ce cas, si elle ne le suit (ajoute suffisamment de valeur):
Dans un tel scénario, je trouve que l'utilisation d'une bibliothèque devrait ajouter de la valeur à mon projet pour l'effort nécessaire pour l'utiliser. Jersey ne semblent mach les exigences tout à fait adéquate, bien que je n'ai pas donné d'autres cadres assez enquête encore.