javagossip / dorado

基于Netty4开发的简单、轻量级、高性能的的Http restful api server
Apache License 2.0
74 stars 24 forks source link
dorado http httpserver netty netty4 rest rest-api restful router spring-boot springboot trie trie-tree

Dorado

简单、快速、轻量级的http restful server实现,基于Netty4和JDK1.8+

Features

Latest version

0.0.56

Maven

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

Quick start

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();
    }
}

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();
    }
}
@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();
    }
}
@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;
    }
}
@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());
}

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集成

swagger集成

如果对swagger还不了解的话,参考:[https://swagger.io/]()

   <dependency>
       <groupId>io.github.javagossip</groupId>
       <artifactId>dorado-swagger-ui</artifactId>
       <version>${dorado.version}</version>
   </dependency>
@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();
    }
}
@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
@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;
    }
}

性能测试