(Translated by https://www.hiragana.jp/)
GitHub - javagossip/dorado: 基于Netty4开发的简单、轻量级、高性能的的Http restful api server
Skip to content

もと于Netty4开发てき简单、轻量级、高性能こうせいのうてきてきHttp restful api server

License

Notifications You must be signed in to change notification settings

javagossip/dorado

Repository files navigation

Dorado

简单、快速かいそく、轻量级的http restful server实现,于Netty4JDK1.8+

Features

  • HTTP/1.1 and HTTP/1.0协议支持しじ
  • うちおけJSON/Protobuf序列じょれつ支持しじ,JSON序列じょれつかまち使用しようFastjson, 赖内おけ
    如果使用しようprotobuf序列じょれつ需要じゅようくだり添加てんかprotobuf赖, protobuf版本はんぽん2.x
  • もと于Trieすうすえ结构实现てきHttpよし支持しじ よしpath支持しじ任意にんいてきjavaせい则表达式,つう过{pathVariable:regex}这种方式ほうしき支持しじみち变量
  • 支持しじぶんけんじょう
  • Springかまち支持しじだま支持しじ注解ちゅうかい方式ほうしきはつはじめspring容器ようき
  • SpringBoot集成しゅうせい
  • 集成しゅうせいswagger restful APIぶん生成せいせい工具こうぐ
  • 过滤支持しじ,实现类似于spring mvcてきinterceptorこうのう
  • 支持しじ全局ぜんきょく异常处理
  • 支持しじ统一响应格式处理

Latest version

0.0.56

Maven

<dependency>
    <groupId>io.github.javagossip</groupId>
    <artifactId>dorado-core</artifactId>
    <version>0.0.56</version>
</dependency>

Quick start

  • さい简单てきDorado rest server
public class Application {

    public static void main(String[] args) throws Exception {
        // create simple rest server, scanPackages现在选,如果设置
        //けい统默认会动找到mainぬし所在しょざいてきつつみさく为basePackage进行扫描
        DoradoServerBuilder.forPort(18888).build().start();
    }
}
  • さらじょうせいさんすうふく务器
public class Application {

    public static void main(String[] args) throws Exception {
        DoradoServerBuilder.forPort(18888).acceptors(2).ioWorkers(4)
                .minWorkers(10).maxWorkers(100)
                .backlog(1024)
                .maxConnection(500).maxPendingRequest(10000)
                .maxIdleTime(120).sendBuffer(256 * 1024)
                .recvBuffer(256 * 1024)
                .scanPackages("com.rtbstack.demo.controller",
                        "com.rtbstack.demo.controller1")
               .build().start();
    }
}
  • springかまち支持しじ

    DoradoServerBuilder.forPort(port).springOn()

    よし于框本身ほんみ直接ちょくせつ赖springかまち,如果启用springきさき,务必くだり添加てんかspringかまちしょう关依赖到项目ちゅういや则系统启动会现ClassNotFoundException

public class Application {

    public static void main(String[] args) throws Exception {
        DoradoServerBuilder.forPort(18888).springOn()
                .scanPackages("com.rtbstack.demo",
                        "com.rtbstack.demo.controller1")
               .build().start();
    }
}
  • Rest Controller
@Controller
@Path("/campaign")
public class CampaignController {

    @Path("/{id:[0-9]+}")
    @GET
    public Campaign newCampaign(int id) {
        Campaign campaign = new Campaign();
        campaign.setId(id);
        campaign.setName("test campaign");

        return campaign;
    }

    @Path("/name")
    public String campaignName() {
        return String.format("hello_campaign", "");
    }

    @POST
    public Campaign save(Campaign campaign) {
        System.out.println(campaign);
        return campaign;
    }

    @Path("/{id}")
    @DELETE
    public void deleteCampaign(int id) {
        System.out.println("delete campaign, id: " + id);
    }

    @GET
    @Path("/{id}")
    public Campaign getCampaign(int id) {
        return Campaign.builder().withId(12)
                .withName("网易こうひしげ推广计划")
                .build();
    }
}
  • Filter
@FilterPath(include = "/campaign/*")
public class DemoFilter implements Filter {

    @Override
    public boolean preFilter(HttpRequest request, HttpResponse response) {
        System.out.println("execute demo filter");
        response.sendError(403, "Forbidden");
        return false;
    }
}
  • ぶんけんじょう支持しじ
    支持しじぶんけんじょう传很简单,ただ需要じゅようはたcontroller方法ほうほうてきまいりすう设置MultipartFileあるものMultipartFile[]そく,单文けんようMultipartFile,
    ぶんけんようMultipartFile[]
@Path("/file/upload")
@POST
public String uploadFile(MultipartFile[] fs,String name) {
    for(MultipartFile f:fs) {
        System.out.println(f.getName());
        System.out.println(f.getContentType());
        System.out.println(f.getSize());
    }
    return String.format("name: %s, file info: %s", name,f.toString());
}
  • 全局ぜんきょく异常处理
    dorado支持しじよう户通过自てい义的类来进行全局ぜんきょく异常处理,处理异常てき方法ほうほうめい必须handleException,类上めん增加ぞうかExceptionAdvice注解ちゅうかい

    @ExceptionAdvice
    public class TestExceptionAdvice {
    
    	@ExceptionType(MyException.class)
    	@Status(400) //Status注解ちゅうかいらい指定していhttp响应じょう态码
    	public String handleException(MyException ex) {
    		return "cause: " + ex.getClass().getName() + "," + ex.getMessage();
    	}
    
    	@ExceptionType(Exception.class)
    	public String handleException(Exception ex) {
    		return "use default exception handler,cause: " + ex.getClass().getName() + "," + ex.getMessage();
    	}
    }
  • 全局ぜんきょく统一响应格式处理
    ざい实际项目开发ちゅうもと于restてきふく务一般都会定义统一的响应格式,如下めんしょしめせ格式かくしき

    {
    	"code": 0,
    	"data": data,
    	"msg": "OK"
    }

    为了避免ざいまい个方法的ほうてき时候よう执行しょうどうてき处理操作そうさ,dorado支持しじてい义一个io.github.javagossip.dorado.rest.http.MethodReturnValueHandlerらい
    实现这个こうのう

    public class TestMethodReturnValueHandler implements MethodReturnValueHandler {
    
    	@Override
    	public Object handleMethodReturnValue(Object value, MethodDescriptor methodDescriptor) {
    		return TestResp.builder().withCode(0).withMsg("OK").withData(value).build();
    	}
    	
    	//てい义这个方ほう实现,ようらいひかえせい哪些かえしかい值需よう这个类进ぎょう处理
    	public boolean supportsReturnType(MethodDescriptor returnType) {
    	    return true;
    	}
    }
  • More examples

Please visit https://github.com/javagossip/dorado-examples

注解ちゅうかい说明

注解ちゅうかい

注解ちゅうかい类型 描述
Controller ひかえせい
Path ひかえせい访问Path
FilterPath 过滤过滤みち,包括ほうかつinclude以及exclude属性ぞくせい

方法ほうほう注解ちゅうかい

注解ちゅうかい类型 描述
Path 资源访问みち,实际访问path为:controllerPath+methodPath
GET 方法ほうほう支持しじHttp GET请求
POST 方法ほうほう支持しじHttp POST请求
PUT 方法ほうほう支持しじHTTP PUT请求
DELETE 方法ほうほう支持しじHTTP DELETE请求
Consume 方法ほうほうさんすう支持しじてきMediaType, 如:application/json
Produce 方法ほうほう响应MediaType, 如:application/json

方法ほうほうさんすう注解ちゅうかい

注解ちゅうかい类型 描述 まいりすう支持しじすうすえ类型
RequestParam Query or Form parameter Primitive type&wrapper class,String
PathVariable Uri path variable, example: {var} Primitive type&wrapper class,String
HeaderParam Request header value Primitive type&wrapper class,String
CookieParam Request cookie value Primitive type&wrapper class,String
RequestBody Http request body String, byte[],InputStream or any serializable type

うちおけふく

SpringBoot集成しゅうせい

  • 添加てんかdorado-spring-boot-starter核心かくしん

    <dependency>
        <groupId>io.github.javagossip</groupId>
        <artifactId>dorado-spring-boot-starter</artifactId>
        <version>${dorado.version}</version>
    </dependency>
  • もと于springbootてきdorado应用

    @SpringBootApplication
    @EnableDorado       //よう这个注解ちゅうかい开启dorado server
    public class SpringBootApplication {
    
        public static void main(String[] args) throws Exception {
            SpringApplication.run(SpringBootApplication.class, args);
        }
    }

    あるもの直接ちょくせつ使用しようDoradoSpringBootApplicationらいがえ换SpringBootApplicationEnableDorado,如下:

      @DoradoSpringBootApplication
      public class SpringBootApplication {
    
            public static void main(String[] args) throws Exception {
                SpringApplication.run(SpringBootApplication.class, args);
            }
       }
  • Doradoかまちてきspring-boot配置はいちさんすう

    まいりすうめい 描述 だま认值
    dorado.port dorado server监听はしこう 18888
    dorado.backlog backlog队列大小だいしょう 10000
    dorado.acceptors dorado acceptor count cpu核心かくしんすう*2
    dorado.io-workers dorado io worker count cpu核心かくしんすう*2
    dorado.min-workers 业务线程最小さいしょう线程すう 100
    dorado.max-workers 业务线程最大さいだい线程すう 100
    dorado.max-connections ふく务器最大さいだい连接すう 100000
    dorado.max-pending-request 业务线程队列长度 10000
    dorado.send-buffer send buffer size 256k
    dorado.recv-buffer recv buffer size 256k
    dorado.max-idle-time 连接最大さいだいそら闲时间 8h
    dorado.max-packet-length http请求つつみたい大小だいしょう 1M

swagger集成しゅうせい

如果对swagger还不了解りょうかいてき话,参考さんこうhttps://swagger.io/

  • 添加てんかdorado-swagger-ui
   <dependency>
       <groupId>io.github.javagossip</groupId>
       <artifactId>dorado-swagger-ui</artifactId>
       <version>${dorado.version}</version>
   </dependency>
  • 项目启动类中使用しようEnableSwagger注解ちゅうかい启用swagger
@EnableSwagger
public class Application {
    public static void main(String[] args) throws Exception {
        // create simple rest server
        DoradoServerBuilder.forPort(18888).maxPacketLength(1024*1024*10)
           .build().start();
    }
}
  • 设置Apiぶん档全きょくしんいき
    实现io.github.javagossip.dorado.swagger.ext.ApiContextBuilderせっこう
@Component //如果集成しゅうせいspringあるspringboot环境てき话,直接ちょくせつ增加ぞうかcomponent注解ちゅうかいそく
@Override
// 这里じょうせいApi全局ぜんきょくしんいき,如文档描じゅつ、license,contactとうしんいき
public ApiContext buildApiContext() {
	Info info = new Info()
			.contact(new Contact().email("javagossip@gmail.com").name("weiping wang")
					.url("http://github.com/javagossip/dorado"))
			.license(new License().name("apache v2.0").url("http://www.apache.org"))
			.termsOfService("http://swagger.io/terms/").description("Doradoふく务框apiせっこうぶん档")
			.title("dorado demo apiせっこうぶん档").version("1.0.0");

	//构造api访问授权てきapiKey
	ApiKey apiKey = ApiKey.builder().withName("Authorization").withIn("header").build();
	ApiContext apiContext = ApiContext.builder().withApiKey(apiKey)
			.withInfo(info).build();

	return apiContext;
}

spring环境需要じゅようざいresources/META-INF/servicesてきio.github.javagossip.dorado.swagger.ext.ApiContextBuilderぶんけんちゅう增加ぞうか如下配置はいち
io.github.javagossip.dorado.demo.ApiContextBuilderImpl

  • ざいcontroller实现さとめん增加ぞうかswaggerしょう关的注解ちゅうかいそく生成せいせいざい线的api doc
@Controller
@Path("/campaign")
@Api(tags = { "营销かつ管理かんり" })
public class CampaignController {
    @Autowired
    private CampaignService campaignService;

    @Path("/{id:[0-9]+}")
    @GET
    @ApiOperation("新建しんたけcampaign")
    public Campaign newCampaign(@PathVariable("id") int id) {
        Campaign campaign = new Campaign();
        campaign.setId(id);
        campaign.setName("test campaign");

        return campaign;
    }
}
  • spring-boot环境,直接ちょくせつ引入dorado-swagger-spring-boot-starter赖来进いち简化swaggerてき使用しよう

     <dependency>
     	<groupId>io.github.javagossip</groupId>
     	<artifactId>dorado-swagger-spring-boot-starter</artifactId>
     	<version>${dorado.version}</version>
     </dependency> 

    しかきさきざいapplication.properties配置はいちぶんけんちゅう增加ぞうか如下配置はいちそく

     dorado.swagger.title=Zhuque's dashboard api
     dorado.swagger.description=${dorado.swagger.title}
     dorado.swagger.license=Apache License
     dorado.swagger.licenseUrl=http://www.apache.org/licenses/LICENSE-2.0
     dorado.swagger.contact.name=weiping wang
     dorado.swagger.contact.email=javagossip@gmail.com
     dorado.swagger.contact.url=https://github.com/javagossip
     
     //API全局ぜんきょく认证配置はいち
     dorado.swagger.apiKey.name=Authorization
     dorado.swagger.apiKey.in=header or query
  • 浏览访问如下そく
    http://{host}:{port}/swagger-ui.html

性能せいのう测试

About

もと于Netty4开发てき简单、轻量级、高性能こうせいのうてきてきHttp restful api server

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published