Jedes Jahr sind immer mehr Java-Frameworks entstanden. Genau wie bei JavaScript glaubt jeder zu wissen, wie ein gutes Framework funktionieren sollte. Sogar meine Oma nutzt mittlerweile ein Framework, von dem ich noch nie gehört habe und das ich wahrscheinlich auch nie nutzen werde. Spaß beiseite, der Markt ist mit aufgeblähten Frameworks gesättigt, die fast alles können, aber wie beurteilen Sie das Ziel dieses Artikels, die besten Java-RESTful-Frameworks auf dem Markt bereitzustellen? Ich stelle nur leichtgewichtige Produkte vor und überspringe diese aufgeblähten und überdesignten Frameworks. Gleichzeitig möchte ich, dass sie stabil und ausgereift sind und einfache, leichte Funktionen bieten. Aus Gründen, die später erläutert werden, verstoße ich nur dann gegen diese Regel, wenn ich Play-Frameworks einführe. Welches Java-RESTful-Framework Sie in zukünftigen Projekten verwenden, hängt ganz von Ihren aktuellen Anforderungen ab. Um Ihnen die Auswahl zu erleichtern, liste ich die wichtigsten Framework-Funktionen auf. Hoffentlich sparen Sie dadurch etwas Zeit.
Dropwizard
Geburtsdatum: 2011
Bewertung: 4,5/5
Dropwizard bietet eine stabile und ausgereifte Java-Bibliothek und kapselt sie in einer einfachen und leichten Tasche.
Dropwizard ist irgendwo zwischen einem Framework und einer Bibliothek. Es bietet alles, was Sie zum Entwickeln von Webanwendungen benötigen. Dank der integrierten Modularität kann eine Anwendung klein und schlank bleiben, was die Entwicklungs- und Wartungszeit und den Aufwand reduziert.
Dropwizard nutzt die vorhandene Jetty-HTTP-Bibliothek und wird in Ihr Projekt eingebettet, ohne dass ein externer Server erforderlich ist. Alle Dropwizard-Projekte verfügen über eine Hauptmethode zur Verwaltung des integrierten HTTP-Servers.
Link
Offizielle Website-GITHUB-Dokumentation
Vorteile
Schneller Projektaufbau und -start
Modular
Unglaublich schnell (zumindest laut den integrierten Metriken)
Jetty für HTTP, Jersey für REST und Jackson für JSON
Wird auch unterstützt andere Bibliotheken, wie Moustache, Logback, JDBI, Hibernate Validator, Guava, …
Verwenden Sie Metriken zur Unterstützung der Überwachung
Hauptmethode startet den Jetty-Server, der leicht debuggt und gewartet werden kann
Starke Community
Nachteile
Dropwizard-Dokumentation ist die wichtigste Wissensquelle, aber nicht hervorragend. Möglicherweise müssen Sie die Dokumentation für Bibliotheken von Drittanbietern durchsuchen und erkunden.
Aus irgendeinem Grund wird der Fehler als normaler Text behandelt, was problematisch sein kann, wenn die Antwort immer JSON sein soll
Stellen Sie sicher, dass Sie den neuesten Dropwizard verwenden. Einige ältere Versionen verwenden den veralteten Drei-Parteien-Bibliothek. Und der frühe Dropwizzard ist auch schwer zu aktualisieren
Beispiel
package com.example.helloworld; import io.dropwizard.Application; import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; import com.example.helloworld.resources.HelloWorldResource; import com.example.helloworld.health.TemplateHealthCheck; public class HelloWorldApplication extends Application<HelloWorldConfiguration> { public static void main(String[] args) throws Exception { new HelloWorldApplication().run(args); } @Override public String getName() { return "hello-world" ; } @Override public void initialize(Bootstrap<HelloWorldConfiguration> bootstrap) { // nothing to do yet } @Override public void run(HelloWorldConfiguration configuration, Environment environment) { // nothing to do yet } }
Hinweise
Ich persönlich möchte dieses Framework nicht für große Projekte empfehlen. Aber wenn Sie es ausprobieren möchten, werden Sie nicht enttäuscht sein. Dieses Framework verwendet hauptsächlich die besten modernen Java-Webkomponenten, die zu einem einfachen und benutzerfreundlichen Framework zusammengefasst sind.
Leider bringt dies auch seine eigenen Probleme mit sich. Die Kombination dieser Bibliotheken kann zu unvorhergesehenen Problemen führen. Aus diesem Grund habe ich 0,5 Sterne abgezogen, statt volle 5 Sterne zu geben.
Jersey
Geburtszeit: 2012 (Jersey 2.X)
Bewertung: 5/5
Jersey RESTful Framework ist ein Open-Source-RESTful-Framework, das JAX implementiert - RS-Spezifikationen (JSR 311 und JSR 339). Es erweitert die JAX-RS-Implementierung und bietet mehr Funktionen und Tools, um die RESTful-Service- und Client-Entwicklung weiter zu vereinfachen. Obwohl es relativ neu ist, handelt es sich bereits um ein RESTful-Service- und Client-Framework in Produktionsqualität.
Links
Offizielle Website-GITHUB-Dokumentation
Vorteile
Ausgezeichnete Dokumentation und Beispiele
Schnell
Super einfaches Routing
Reibungslose JUnit-Integration
Ich persönlich finde, dass bei der Entwicklung von RESTful-Diensten die JAX-RS-Implementierung besser ist als das MVC-Framework.
Kann in andere Bibliotheken/Frameworks (Grizzly, Netty) integriert werden. Dies ist möglicherweise auch der Grund, warum viele Produkte es verwenden.
Unterstützt asynchrone Verbindungen
Sie mögen keine Servlet-Container? Sie benötigen sie nicht, wenn Sie Jersey verwenden.
WADL-, XML/JSON-Unterstützung
In Glassfish enthalten
Nachteile
Jersey 2.0+ verwendet eine etwas komplexe Dependency-Injection-Implementierung
Wahrscheinlich keine schlechte Sache. Jersey 1.X verwendet die ältere JAX-RS-Implementierung
Viele Bibliotheken von Drittanbietern unterstützen nur Jersey 1.X und sind in Jersey 2.X nicht verfügbar
Beispiele
package org.glassfish.jersey.examples.helloworld; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @Path ( "helloworld" ) public class HelloWorldResource { public static final String CLICHED_MESSAGE = "Hello World!" ; @GET @Produces ( "text/plain" ) public String getHello() { return CLICHED_MESSAGE; } }
Anmerkungen
Jersey ist meine Wahl, 5 Sterne.
Ninja Web Framework
Geburtsdatum: 2012
Bewertung: 3,5/5
Ninja Web Framework ist ein Full-Stack-Java-Webframework. Stabil, schnell, zuverlässig, produktionstauglich.
Es bietet alles zum Entwickeln, Testen, Veröffentlichen und Warten von RESTful-Webanwendungen (Servlets, Guice, JPA, Flyway-Migrationen, Maven usw.).
Genau wie DropWizzard Ninja Web Framework ist ein integrierter Software-Stack. Sie müssen kein eigenes Projekt erstellen. Verwenden Sie einfach den Maven-Archetyp, um ein neues Projekt zu generieren, importieren Sie es in die IDE und beginnen Sie mit dem Codieren.
Link
Offizielle Website-GITHUB-Dokumentation
Vorteile
Schnell
Schnelle Projekterstellung und Inbetriebnahme
Modularisierung
XML-, HTML-, JSON-Rendering
Unterstützt auch andere Bibliotheken (wie Guice, Logback, Guava usw.)
Gute Datenpersistenz und Caching
Nicht Wie ein Servlet-Container? Sie können den Container auswählen, der Ihnen gefällt
Wenn Ihnen der Container überhaupt nicht gefällt, können Sie den Standalone-Modus verwenden und Jetty als selbstausführendes Glas verwenden
Nachteile
同样,就像DropWizzard, 文档有但是不够好。我花了好长时间去了解它。这个框架也依赖很多其它的库,有时候想得到所需的信息很麻烦。
不怎么出名,社区小。 有谣言说这个框架是由那些切换到Scala的 Play 2.X 用户创建的
例子
package controllers; public class ApplicationController { public Result index() { Person person = new Person(); person.name = "John Johnson" ; return Results.json().render(person); } }
注解
看起来不错,但是在它成熟之前我还是把它丢在一边吧。
Play Framework
诞生时间: 2011
评分: 4/5
使用Play Framework 很容易地创建,构建和发布 web 应用程序,支持 Java & Scala。它使用Akka, 基于一个轻量级的无状态的架构。它应该应用于大规模地低CPU和内存消耗的应用。
链接
官方站点 GITHUB 文档
优点
易于开发
快,但是没有其它的一些框架快
基于 Netty, 支持非阻塞的 I/O. 并行处理远程调用的时候很优秀
社区很大
快速的项目构建和启动
模块化
MVC
REST, JSON/XML, Web Sockets, non-blocking I/O
只需刷新浏览器就可以看到最新的改变
支持Async
有出版的书
缺点
版本2.0 是最有争议的Java框架。 切换至Switch to Scala made some Java developers outraged.
不向后兼容; Play 2.X 重写了
号称轻量级,但有些臃肿
SBT构建工具. 号称 Maven 杀手, 但是从没有优秀到替换它。难以学习和配置
非 servlet
Breaking changes across releases
例子
package controllers import play.api._ import play.api.mvc._ class Application extends Controller { def hello(name: String) = Action { Ok( "Hello " + name + "!" ) } }
注解
抱怨归抱怨,我还是一直喜欢和首选这个框架。不幸的是,我只能给它4颗星。我坚信 基于JAX-RS的框架更适合 RESTful web services.
RestExpress
诞生时间: 2009
评分: 3/5
RestExpress是一个非容器的轻量级的 Netty HTTP栈的包装, 以便更容易地创建 Java RESTful services.
RestExpress 目标是支持最好的 RESTful 实践。
链接
GITHUB
优点
真正的微框架
顶级的性能,快,可靠
XML/JSON
最老的也是最稳定的 RESTful 框架之一
缺点
没有文档
几乎没有支持
很小的社区
例子
package com.example; import java.io.IOException; import io.netty.handler.codec.http.HttpMethod; import org.restexpress.RestExpress; public class Main { public static RestExpress startServer(String[] args) throws 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) throws Exception { RestExpress server = startServer(args); System.out.println( "Hit enter to stop it..." ); System.in.read(); server.shutdown(); } }
注解
尽管这个框架超级快,我也不想推荐它。文档缺乏以及没有支持使它成为一个欠佳的框架。看在速度的份上给它3颗星。
Restlet
诞生时间: 2005
评分: 4.5/5
Restlet 帮助Java程序员建立大规模的快速的符合 RESTful 架构模式的web api。
它提供了强大的路由和 filtering 系统。统一的client/server Java API. 满足所有主要的平台 (Java SE/EE, Google AppEngine, OSGi, GWT, Android) 以及提供了无数的扩展以满足程序员的需求。
据我说知,它是第一个 java RESTful web 框架。很多公司都在用它,但是你可能从未听说过它,好像它已经不可见了。
链接
官方站点 GITHUB 文档
优点
强大
企业级的框架
多平台 Java SE, Java EE, Google Web Toolkit, Google AppEngine, Android, OSGi environments
支持JAX-RS (就像 Jersey)
大部分高级 RESTful 支持
模块化
支持其它库
开发一直活跃
智能的url绑定, 全功能的 URI 路由
有相关的书籍
缺点
非常陡峭的学习曲线
关闭的社区,尽管 StackOverflow 上还是开放的
不再流行,更多的是因为 Play Framework 和 Jersey
例子
public class Part03 extends ServerResource { public static void main(String[] args) throws Exception { // Create the HTTP server and listen on port 8182 new Server(Protocol.HTTP, 8182 , Part03. class ).start(); } @Get ( "txt" ) public String toString() { return "hello, world" ; } }
注解
尽管这个框架还一直流行,但到它的和当前的完成度,我不能给它5颗星。
Restx
诞生时间: 2013
评分: 3.5/5
Restx 是一个轻量级的,模块化的,特性众多的,超快的开源 Java REST 框架。
链接
官方站点 GITHUB 文档
优点
快速,轻量级
容易搭建
真正的微框架
模块化
支持其它库
支持MongoDB
缺点
不友好的令人迷惑的文档。对于这类框架我期望能有好一点的文档
太young
目前还不支持异步Async
例子
@GET ( "/message/{id}" ) public Message sayHello(String id, // path param String who // query param ) { return new Message().setMessage(String.format( "hello %s, it's %s" , who, DateTime.now().toString( "HH:mm:ss" ))); } @POST ( "/message/{id}" ) public Message sayHello(String id, // path param Message msg // body param ) { return msg.setMessage(String.format( "%s @ %s" , msg.getMessage(), DateTime.now().toString( "HH:mm:ss" ))); }
注解
真心来讲我没有在这个框架上花费太多时间。不值得在另一个框架上花费太多精力,我意思是说,Java框架市场已经越来越碎片化了,就像 JavaScript 市场,应该停止这种趋势了。
Spark Framework
诞生时间: 2011
评分: 3.5/5
不要和 Apache 的大数据框架 Spark 弄混, 这里的 Spark 框架是一个轻量级的 Java web 框架,用来进行快速的开发(50% Spark用户使用 Spark 创建 REST APIs)。 它受 Ruby 框架 Sinatra 启发。
它有一个不到1M的最小化的内核, 提供了所有基本的特性, 用来构建 RESTful 或者传统的 web 应用程序。
链接
官方站点 GITHUB 文档
优点
快,轻量级
优秀的快速原型
易于搭建
经常和AngularJS搭配使用
真正的微框架
使用 Jetty
可以用在容器中或者独立运行
缺点
文档可以更好,它不适合初学者
不适合大型项目
社区小
例子
import static spark.Spark.*; public class HelloWorld { public static void main(String[] args) { get( "/hello" , (req, res) -> "Hello World" ); } }
注解
这个框架适合初始开发。主要用作小小项目或者原型。
更多8个Java RESTful框架相关文章请关注PHP中文网!