> Java > java지도 시간 > 본문

8 자바 RESTful 프레임워크

高洛峰
풀어 주다: 2017-01-17 11:08:59
원래의
1349명이 탐색했습니다.

과거에는 매년 더 많은 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 문서는 지식의 주요 원천이지만 우수하지는 않습니다. 타사 라이브러리에 대한 설명서를 검색하고 탐색해야 할 수도 있습니다.

Example

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
   }
  
}
로그인 후 복사

Notes

저는 개인적으로 대규모 프로젝트에는 이 프레임워크를 추천하고 싶지 않습니다. 하지만 시도해보고 싶다면 실망하지 않을 것입니다. 주로 이 프레임워크는 간단하고 사용하기 쉬운 프레임워크로 결합된 최고의 최신 Java 웹 구성 요소를 사용합니다.

안타깝게도 이 역시 문제를 가져옵니다. 이러한 라이브러리를 결합하면 예상치 못한 문제가 발생할 수 있습니다. 그래서 별 5개를 다 주는 대신 별 0.5개를 뺐습니다.

Jersey

생년월일: 2012(Jersey 2.X)

등급: 5/5

Jersey RESTful 프레임워크는 JAX를 구현하는 오픈 소스 RESTful 프레임워크입니다. - RS(JSR 311 & JSR 339) 사양. 이는 JAX-RS 구현을 확장하고 RESTful 서비스 및 클라이언트 개발을 더욱 단순화하기 위한 더 많은 기능과 도구를 제공합니다. 비교적 새로운 것이지만 이미 프로덕션급 RESTful 서비스 및 클라이언트 프레임워크입니다.


링크

공식 사이트 GITHUB 문서

장점


훌륭한 문서 및 예제

빠름

매우 쉬운 라우팅

원활한 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에서는 사용할 수 없습니다

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;
   }
}
로그인 후 복사


참고

저는 저지를 선택했습니다. 별 5개입니다.

Ninja Web Framework


생년월일: 2012

평점: 3.5/5

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&#39;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中文网!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿