과거에는 매년 더 많은 Java 프레임워크가 등장했습니다. JavaScript와 마찬가지로 모든 사람은 좋은 프레임워크가 어떻게 작동해야 하는지 알고 있다고 생각합니다. 이제 우리 할머니도 내가 들어본 적도 없고 아마 절대 사용하지 않을 프레임워크를 사용하고 있습니다. 농담은 제쳐두고 시장은 거의 모든 작업을 수행할 수 있는 비대해진 프레임워크로 가득 차 있습니다. 하지만 이 기사의 목표는 최고의 Java RESTful 프레임워크를 제공하는 것입니다. 나는 가벼운 제품만 소개하고 부풀리고 과도하게 설계된 프레임워크는 건너뜁니다. 동시에 간단하고 가벼운 기능을 제공하면서 안정적이고 성숙해지기를 원합니다. 나는 나중에 설명할 이유로 Play 프레임워크를 소개할 때만 이 규칙을 어겼습니다. 향후 프로젝트에 사용할 Java RESTful 프레임워크는 전적으로 현재 요구 사항에 따라 다릅니다. 더 쉽게 선택할 수 있도록 가장 눈에 띄는 프레임워크 기능을 나열하겠습니다. 이를 통해 시간을 절약할 수 있기를 바랍니다.
Dropwizard
생년월일: 2011
평점: 4.5/5
Dropwizard는 안정적이고 성숙한 Java 라이브러리를 제공하며 이를 간단하고 가벼운 Bag에 캡슐화합니다.
Dropwizard는 프레임워크와 라이브러리 사이에 있습니다. 웹 애플리케이션 개발에 필요한 모든 것을 제공합니다. 내장된 모듈성 덕분에 애플리케이션을 작고 간결하게 유지하여 개발 및 유지 관리 시간과 부담을 줄일 수 있습니다.
Dropwizard는 기존 Jetty HTTP 라이브러리를 사용하며 외부 서버 없이도 프로젝트에 포함됩니다. 모든 Dropwizard 프로젝트에는 내장된 HTTP 서버를 관리하는 주요 방법이 있습니다.
링크
공식 사이트 GITHUB 문서
장점
빠른 프로젝트 구축 및 시작
모듈식
놀라울 정도로 빠릅니다(적어도 내장된 측정항목에 따르면)
HTTP용 Jetty, REST용 Jersey, JSON용 Jackson
또한 지원 Mustache, Logback, JDBI, Hibernate Validator, Guava 등과 같은 다른 라이브러리…
메트릭을 사용하여 모니터링 지원
메인 메소드는 쉽게 디버깅하고 유지 관리할 수 있는 Jetty 서버를 시작합니다.
강력한 커뮤니티
단점
Dropwizard 문서는 지식의 주요 원천이지만 우수하지는 않습니다. 타사 라이브러리에 대한 설명서를 검색하고 탐색해야 할 수도 있습니다.
예
참고저는 개인적으로 대규모 프로젝트에는 이 프레임워크를 추천하고 싶지 않습니다. 하지만 시도해보고 싶다면 실망하지 않을 것입니다. 주로 이 프레임워크는 간단하고 사용하기 쉬운 프레임워크로 결합된 최고의 최신 Java 웹 구성 요소를 사용합니다.
안타깝게도 이 역시 문제를 가져옵니다. 이러한 라이브러리를 결합하면 예상치 못한 문제가 발생할 수 있습니다. 이것이 바로 별 5개를 주는 대신 별 0.5개를 뺀 이유입니다.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 } }
Jersey
생년월일: 2012(Jersey 2.X)
링크
훌륭한 문서 및 예제
빠름
매우 쉬운 라우팅
원활한 JUnit 통합
개인적으로 RESTful 서비스를 개발할 때 MVC 프레임워크보다 JAX-RS 구현이 더 좋습니다.
다른 라이브러리/프레임워크(Grizzly, Netty)에 통합될 수 있으므로 많은 제품에서 이를 사용합니다.
비동기 연결 지원
Jersey를 사용할 때는 서블릿 컨테이너가 필요하지 않습니까?
WADL, XML/JSON 지원
Glassfish에 포함
단점
Jersey 2.0+는 다소 복잡한 종속성 주입 구현을 사용합니다
아마도 나쁜 것은 아닐 것입니다. Jersey 1.X는 이전 JAX-RS 구현을 사용합니다
많은 타사 라이브러리는 Jersey 1.X만 지원하며 Jersey 2.X에서는 사용할 수 없습니다
예
노트저지는 제가 선택한 것입니다. 별 5개입니다.
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; } }Ninja Web Framework
생년월일: 2012
Ninja Web Framework는 풀스택 Java 웹 프레임워크입니다. 안정적이고 빠르며 신뢰할 수 있는 프로덕션급입니다.
RESTful 웹 애플리케이션(Servlets, Guice, JPA, Flyway 마이그레이션, Maven 등)을 개발, 테스트, 게시 및 유지 관리하는 데 필요한 모든 것을 제공합니다.DropWizzard와 마찬가지로 , Ninja Web Framework는 통합 소프트웨어 스택입니다. 직접 빌드할 필요는 없습니다. Maven 원형을 사용하여 새 프로젝트를 생성하고 이를 IDE로 가져와서 코딩을 시작하면 됩니다.
링크
공식 사이트 GITHUB 문서
빠름
빠른 프로젝트 빌드 및 시작
모듈화
XML, HTML, JSON 렌더링
다른 라이브러리(예: Guice, Logback, Guava 등)도 지원
좋은 데이터 지속성 및 캐싱
하지 마세요 서블릿 컨테이너처럼요? 마음에 드는 컨테이너를 선택할 수 있습니다
컨테이너가 전혀 마음에 들지 않으면 독립형 모드를 사용하고 Jetty를 자체 실행 Jar로 사용할 수 있습니다
단점
同样,就像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中文网!