Chaque année, dans le passé, de plus en plus de cadres Java ont émergé. Comme JavaScript, tout le monde pense savoir à quoi devrait ressembler la fonctionnalité d'un bon cadre. Même ma vieille grand-mère utilise maintenant un cadre dont je n'ai jamais entendu parler et que je n'utiliserai probablement jamais. Le marché du cadre gonflé est saturé par le cadre gonflé qui peut faire presque n'importe quoi, mais comment le juger? Cet article vise à fournir actuellement les meilleurs cadres Java RESTful disponibles. Je n'introduise que des produits légers, en sautant ces cadres gonflés sur-conçus. En même temps, je veux juste qu'ils soient stables et matures, offrant des fonctionnalités simples et légères. Je n'ai enfreint cette règle que lors de l'introduction de frameworks de lecture, la raison est donnée plus tard. Le cadre Java RESTful à utiliser dans les projets futurs dépend entièrement de vos besoins actuels. Pour vous faciliter vos choix, je vais énumérer les fonctionnalités de framework les plus importantes, en espérant que cela vous fera gagner du temps.
Dropwizard
Temps de naissance: 2011
Note: 4.5 / 5
Dropwizard fournit une bibliothèque Java stable et mature et la résume dans un package simple et léger.
Dropwizard est quelque part entre le cadre et la bibliothèque. Il fournit tous les besoins nécessaires pour développer une application Web. Grâce à la modularité intégrée, une application peut rester petite et maigre, réduisant le temps de développement et de maintenance et réduisant le fardeau.
Dropwizard utilise la bibliothèque HTTP de jetée existante pour intégrer votre projet sans avoir besoin d'un serveur externe. Tous les projets Dropwizard ont une méthode principale pour gérer le serveur HTTP intégré.
Lien <br /> Documentation officielle du site GitHub
avantage
Construction et démarrage du projet rapide
Modulaire
Incroyable rapide (au moins basé sur les résultats mesurés par la métrique intégrée)
Jetée pour HTTP, Jersey pour le repos et Jackson pour JSON
Il prend également en charge d'autres bibliothèques, telles que Moustache, Logback, JDBI, Validator Hibernate, Guava,…
Soutenir la surveillance avec des mesures
La méthode principale démarre le serveur de jets, qui peut être débogué et maintenu facilement
Force de la communauté forte
défaut
La documentation de Dropwizard est la principale source de connaissances, mais elle n'est pas excellente. Vous devrez peut-être rechercher et découvrir des documents pour les bibliothèques tierces.
Pour une raison quelconque, l'erreur est traitée comme du texte brut, si vous voulez que le résultat de la réponse soit toujours JSON, cela peut être problématique
Assurez-vous d'utiliser le dernier Dropwizard, certaines versions anciennes utilisent des bibliothèques tierces abandonnées. Et c'était difficile de mettre à niveau les premiers Dropwizzard
exemple
package com.example.heloworld; import io.dropwizard.application; import io.dropwizard.setup.bootstrap; import io.dropwizard.setup.environment; import com.example.helloworld.resources.helloworldResource; import classe publique HelloworldApplication étend l'application <HelloworldConfiguration> {public static void main (String [] args) lève une exception {new HelloworldApplication (). Run (args); } @Override public String getName () {return "hello-world"; } @Override public void initialize (bootstrap <HelloworldConfiguration> bootstrap) {// rien à faire} @Override public void run (HelloworldConfiguration Configuration, Environment Environment) {// rien à faire}} Remarque <br /> Je ne veux personnellement recommander ce cadre pour les grands projets. Mais si vous voulez l'essayer, vous ne serez pas déçu. Surtout, ce framework utilise les meilleurs composants Web Java modernes et s'assemble dans un cadre simple et facile à utiliser.
Malheureusement, cela apporte également ses problèmes. La combinaison de ces bibliothèques peut entraîner des problèmes imprévus. C'est pourquoi j'ai perdu 0,5 étoiles pour cela, sans le noter comme un score complet de 5 étoiles.
Jersey
Temps de naissance: 2012 (Jersey 2.x)
Note: 5/5
Le cadre RESTful Jersey est un cadre Open Source RESTful qui implémente la spécification JAX-RS (JSR 311 & JSR 339). Il étend l'implémentation JAX-RS et fournit plus de fonctionnalités et d'outils qui peuvent simplifier davantage le service RESTful et le développement des clients. Bien qu'il soit relativement nouveau pour Xinyi, il s'agit déjà d'un service RESTful et d'un cadre client de qualité produit.
Lien <br /> Documentation officielle du site GitHub
avantage
Excellente documentation et exemples
rapide
Routage super facile
Intégration de Junit lisse
Personnellement, lors du développement d'un service Restful, la mise en œuvre de Jax-RS est meilleure que les cadres MVC.
Il peut être intégré dans d'autres bibliothèques / frameworks (Grizzly, Netty). Cela peut également être la raison pour laquelle de nombreux produits l'utilisent.
Soutien de la liaison asynchrone
Vous n'aimez pas les conteneurs de servlet? Vous pouvez les utiliser lorsque vous utilisez Jersey.
Support WADL, XML / JSON
Inclus dans le poisson-verre
défaut
Jersey 2.0+ utilise une implémentation d'injection de dépendance complexe
Probablement pas une mauvaise chose. Jersey 1.x Impléments en utilisant JAX-RS plus ancien
Un grand nombre de bibliothèques tierces de support uniquement Jersey 1.x, et ne sont pas disponibles dans Jersey 2.x
exemple
package org.glassfish.jersey.examples.heloworld; Importer javax.ws.rs.get; import javax.ws.rs.path; import javax.ws.rs.produces; @Path ("Helloworld") classe publique HelloworldResource {public static final String cliched_message = "Hello World!" ; @ Get @ produmes ("text / plain") public String gethello () {return cliched_message; }} annotation
Jersey est mon choix, 5 étoiles.
Framework Web Ninja
Temps de naissance: 2012
Note: 3.5 / 5
Ninja Web Framework est un framework Web Java complet. Stable, rapide, fiable, de qualité produit.
Il fournit tout ce qui développe, teste, publie et maintient des applications Web reposantes (servlets, Guice, JPA, migrations de voile de vol, maven, etc.).
Tout comme Dropwizzard, Ninja Web Framework est une pile logicielle intégrée. Vous n'avez pas à construire le vôtre, utilisez simplement Maven Archetype pour générer un nouveau projet, l'importer dans l'IDE et commencer le codage.
Lien <br /> Documentation officielle du site GitHub
avantage
rapide
Construction et démarrage du projet rapide
Modulaire
XML, HTML, JSON Rendu
D'autres bibliothèques sont également prises en charge (comme Guice, Logback, Goyave, etc.)
Bonne persistance de données et mise en cache
Vous n'aimez pas le conteneur servlet? Tu peux choisir le conteneur que tu aimes
Si vous n'aimez pas du tout les conteneurs, vous pouvez utiliser le mode autonome et utiliser la jetée comme pot auto-exécutant
défaut
De même, comme Dropwizzard, la documentation a mais n'est pas assez bonne. Il m'a fallu beaucoup de temps pour le savoir. Ce cadre repose également sur de nombreuses autres bibliothèques, et parfois il est difficile d'obtenir les informations requises.
Pas très célèbre, petite communauté. Il y a des rumeurs selon lesquelles ce cadre a été créé par les utilisateurs de Play 2.x qui sont passés à Scala
exemple
contrôleurs de package; classe publique ApplicationController {Public Result Index () {Person Person = new Person (); personne.name = "John Johnson"; Retour Result.json (). Render (personne); }}Remarque <br /> Il a l'air bien, mais je vais le jeter de côté avant qu'il ne mûrisse.
Frame de jeu
Temps de naissance: 2011
Note: 4/5
Utilisez le Framework Play pour créer, créer et publier des applications Web avec le support Java & Scala. Il utilise Akka, basé sur une architecture sans état légère. Il doit être utilisé pour les applications avec une faible consommation de CPU et de mémoire à grande échelle.
Lien <br /> Documentation officielle du site GitHub
avantage
Facile à développer
Rapide, mais pas aussi rapide que les autres cadres
Sur la base de Netty, il prend en charge les E / S non bloquantes. Il est excellent lors de la gestion des appels distants en parallèle.
La communauté est grande
Construction et démarrage du projet rapide
Modulaire
MVC
Repos, json / xml, sockets web, E / S non bloquante
Il suffit de rafraîchir le navigateur pour voir les derniers changements
Support Async
Il y a des livres publiés
défaut
La version 2.0 est le cadre Java le plus controversé. Le passage à Scala a rendu des développeurs Java.
Pas compatible en arrière; Jouer 2.x réécrit
Il est connu comme léger, mais il est un peu gonflé
Outil de construction SBT. Connu sous le nom de Maven Killer, mais ne fait jamais pour le remplacer. Difficile à apprendre et à configurer
Non-service
Briser les changements entre les versions
exemple
Les contrôleurs de package import play.api._import play.api.mvc._ application de classe étend le contrôleur {def hello (name: string) = action {ok ("hello" + name + "!")}}Remarque <br /> Peu importe combien je me plainte, j'aime toujours et choisis ce framework en premier. Malheureusement, je ne peux lui donner que 4 étoiles. Je crois fermement qu'un cadre basé sur Jax-RS convient plus aux services Web RESTful.
Reposxpress
Temps de naissance: 2009
Note: 3/5
RESTEXPRESS est un wrapper de pile Http Stack NetTy-Container Light-Container pour faciliter la création de services Java Restful.
L'objectif de Ressexpress est de soutenir les meilleures pratiques RESTFul.
Lien
Github
avantage
Vraiment microframework
Performances supérieures, rapide et fiable
XML / JSON
L'un des cadres RESTful les plus anciens et les plus stables
défaut
Aucune documentation
Presque aucun soutien
Une très petite communauté
exemple
package com.example; Importer java.io.ioException; Importer io.netty.handler.codec.http.httpMethod; import org.restExpress.Restexpress; classe publique Main {public static restExpress starterver (string [] args) lève ioException {restExpress server = new restExpress (); MyResource r = new myResource (); server.uri ("/ myapp / myResource", r) .Method (httpMethod.get) .NoSerialization (); server.uri ("/ myapp / myresource", r) .Method (httpMethod.post); server.bind (8080); Return Server; } public static void main (String [] args) lève une exception {restExpress server = starterver (args); System.out.println ("Hit Entrée pour l'arrêter ..."); System.in.read (); server.shutdown (); }}Remarque <br /> Bien que ce framework soit super rapide, je ne veux pas non plus le recommander. Le manque de documentation et le manque de soutien en font un cadre sous-développé. Donnez-lui 3 étoiles pour la vitesse.
Restreindre
Temps de naissance: 2005
Note: 4.5 / 5
Restlet aide les programmeurs Java à créer des API Web à grande échelle et à grande échelle conformes aux modèles d'architecture reposants.
Il fournit des systèmes de routage et de filtrage puissants. L'API Java client / serveur unifié répond à toutes les principales plates-formes (Java SE / EE, Google Appengine, OSGI, GWT, Android) et fournit d'innombrables extensions pour répondre aux besoins des programmeurs.
Pour autant que je sache, il s'agit du premier framework Web Java Restful. De nombreuses entreprises l'utilisent, mais vous n'en avez peut-être jamais entendu parler, comme s'il n'était plus visible.
Lien <br /> Documentation officielle du site GitHub
avantage
puissant
Cadre de niveau d'entreprise
Java SE Java SE, Java EE, Google Web, Google Toolkit, Google Appegen, Android, OSGI
Soutenir Jax-RS (tout comme Jersey)
Support reposant le plus avancé
Modulaire
Soutenez les autres bibliothèques
Le développement a été actif
Reliure d'URL intelligente, routage URI complet
Il y a des livres connexes
défaut
Courbe d'apprentissage très abrupte
Communauté fermée, ouverte même sur stackOverflow
Plus populaire, plus à cause de Play Framework et Jersey
exemple
public class part03 étend ServerResource {public static void main (String [] args) lève l'exception {// créer le serveur http et écouter sur le port 8182 nouveau serveur (protocole.http, 8182, part03. class) .start (); } @Get ("txt") public String toString () {return "Hello, world"; }}Remarque <br /> Bien que ce cadre ait été populaire tout le temps, je ne peux pas lui donner 5 étoiles à son achèvement et actuel.
Replier
Temps de naissance: 2013
Note: 3.5 / 5
RESTX est un cadre Java REST LETHERDE, modulaire, multi-fonctionnaires et super rapide.
Lien <br /> Documentation officielle du site GitHub
avantage
Rapide, léger
Facile à construire
Vraiment microframework
Modulaire
Soutenez les autres bibliothèques
Soutenir MongoDB
défaut
Documentation déroutante hostile. J'attends une meilleure documentation pour ce type de cadre
Trop jeune
L'async asynchrone n'est pas encore pris en charge
exemple
@Get ("/ message / {id}") Message public SayShello (String id, // Path Param String who // requête param) {return new Message (). SetMessage (string.format ("Hello% s, c'est% s", qui, datetime.now (). ToString ("hh: mm: ss"))); } @Post ("/ message / {id}") Message public SayShello (String id, // path param message msg // body param) {return msg.setMessage (string.format ("% s @% s", msg.getMessage (), dateTime.Now (). ToString ("hh: mm: ss"))); }Remarque <br /> Pour être honnête, je n'ai pas passé beaucoup de temps sur ce cadre. Cela ne vaut pas la peine de dépenser trop d'efforts sur un autre cadre, je veux dire, le marché du cadre Java devient de plus en plus fragmenté, tout comme le marché JavaScript, cette tendance doit être arrêtée.
Cadre étincelant
Temps de naissance: 2011
Note: 3.5 / 5
Ne soyez pas confondu avec le framework Big Data d'Apache, le framework Spark ici est un framework Web Java léger pour un développement rapide (50% des utilisateurs de Spark utilisent Spark pour créer des API REST). Il est inspiré par le Ruby Framework Sinatra.
Il a un noyau minimisée de moins de 1 m et fournit toutes les fonctionnalités de base pour créer des applications Web reposantes ou traditionnelles.
Lien <br /> Documentation officielle du site GitHub
avantage
Rapide, léger
Excellent prototype rapide
Facile à construire
Souvent utilisé avec AngularJS
Vraiment microframework
Utilisation de jetty
Peut être utilisé dans des conteneurs ou fonctionner indépendamment
défaut
La documentation peut être meilleure, elle ne convient pas aux débutants
Pas adapté aux grands projets
Communauté petite
exemple
Importer Static Spark.Spark. *; classe publique Helloworld {public static void main (String [] args) {get ("/ hello", (req, res) -> "Hello world"); }}Remarque <br /> Ce cadre convient au développement initial. Principalement utilisé comme petits projets ou prototypes.