All Projects → javagossip → Dorado

javagossip / Dorado

Licence: apache-2.0
基于Netty4开发的简单、轻量级、高性能的的Http restful api server

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Dorado

Springboot Templates
springboot和dubbo、netty的集成,redis mongodb的nosql模板, kafka rocketmq rabbit的MQ模板, solr solrcloud elasticsearch查询引擎
Stars: ✭ 100 (+53.85%)
Mutual labels:  swagger, spring-boot, springboot, netty
Spring Boot Plus
🔥 Spring-Boot-Plus is a easy-to-use, high-speed, high-efficient,feature-rich, open source spring boot scaffolding. 🚀
Stars: ✭ 2,198 (+3281.54%)
Mutual labels:  swagger, swagger-ui, spring-boot, springboot
Crown
Based on SpringBoot2, Crown builds a rapidly developed web application scaffolding.
Stars: ✭ 161 (+147.69%)
Mutual labels:  restful, swagger-ui, springboot
Spring Boot Examples
个人学习 SpringBoot2.x 写的一些示例程序,目前正在持续更新中.....
Stars: ✭ 159 (+144.62%)
Mutual labels:  swagger, spring-boot, springboot
Spring Boot Leaning
Spring Boot 2.X 最全课程代码
Stars: ✭ 2,008 (+2989.23%)
Mutual labels:  swagger, spring-boot, springboot
X Springboot
X-SpringBoot是一个轻量级的Java快速开发平台,能快速开发项目并交付【接私活利器】
Stars: ✭ 1,117 (+1618.46%)
Mutual labels:  swagger, restful, spring-boot
Mall
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
Stars: ✭ 54,797 (+84203.08%)
Mutual labels:  swagger-ui, spring-boot, springboot
Spring Boot Projects
该仓库中主要是 Spring Boot 的入门学习教程以及一些常用的 Spring Boot 实战项目教程,包括 Spring Boot 使用的各种示例代码,同时也包括一些实战项目的项目源码和效果展示,实战项目包括基本的 web 开发以及目前大家普遍使用的线上博客项目/企业大型商城系统/前后端分离实践项目等,摆脱各种 hello world 入门案例的束缚,真正的掌握 Spring Boot 开发。
Stars: ✭ 4,022 (+6087.69%)
Mutual labels:  swagger, spring-boot, springboot
Naivechat
🎭 本项目是作者小傅哥使用JavaFx、Netty4.x、SpringBoot、Mysql等技术栈和偏向于DDD领域驱动设计方式,搭建的仿桌面版微信实现通信核心功能。课程文章已发布到GitChat专栏,欢迎购买。如果本项目能为您提供帮助,请给予支持(关注、⭐️Star、分享)!
Stars: ✭ 290 (+346.15%)
Mutual labels:  springboot, netty4, netty
itstack-naive-chat-server
💞 《服务端》| 服务端同样使用Netty4.x作为socket的通信框架,同时在服务端使用Layui作为管理后台的页面,并且我们的服务端采用偏向于DDD领域驱动设计的方式与Netty集合,以此来达到我们的框架结构整洁干净易于扩展。同时我们的通信协议也是在服务端进行定义的,并对外提供可引入的Jar包,这样来保证客户端与服务端共同协议下进行通信。
Stars: ✭ 21 (-67.69%)
Mutual labels:  netty, springboot, netty4
Springdoc Openapi
Library for OpenAPI 3 with spring-boot
Stars: ✭ 1,113 (+1612.31%)
Mutual labels:  swagger, swagger-ui, spring-boot
Javaquarkbbs
基于Spring Boot实现的一个简易的Java社区
Stars: ✭ 755 (+1061.54%)
Mutual labels:  swagger, spring-boot, netty
Spring Boot Quick
🌿 基于springboot的快速学习示例,整合自己遇到的开源框架,如:rabbitmq(延迟队列)、Kafka、jpa、redies、oauth2、swagger、jsp、docker、spring-batch、异常处理、日志输出、多模块开发、多环境打包、缓存cache、爬虫、jwt、GraphQL、dubbo、zookeeper和Async等等📌
Stars: ✭ 1,819 (+2698.46%)
Mutual labels:  swagger, spring-boot, springboot
Flasgger
Easy OpenAPI specs and Swagger UI for your Flask API
Stars: ✭ 2,825 (+4246.15%)
Mutual labels:  swagger, restful, swagger-ui
Newbee Mall Api
新蜂商城前后端分离版本-后端API源码
Stars: ✭ 384 (+490.77%)
Mutual labels:  swagger, spring-boot, springboot
Spring Boot Elasticsearch Lire Docker
Spring-boot+ElasticSearch+LIRE+SwaggerUI RESTful.
Stars: ✭ 7 (-89.23%)
Mutual labels:  swagger, swagger-ui, spring-boot
Netty Websocket Spring Boot Starter
🚀 lightweight high-performance WebSocket framework ( 轻量级、高性能的WebSocket框架)
Stars: ✭ 885 (+1261.54%)
Mutual labels:  spring-boot, netty
Fastapi
FastAPI framework, high performance, easy to learn, fast to code, ready for production
Stars: ✭ 39,588 (+60804.62%)
Mutual labels:  swagger, swagger-ui
Swagger Editor
Swagger Editor
Stars: ✭ 7,365 (+11230.77%)
Mutual labels:  swagger, swagger-ui
Ruoyi
(RuoYi)官方仓库 基于SpringBoot的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。直接运行即可用
Stars: ✭ 905 (+1292.31%)
Mutual labels:  swagger, springboot

Dorado

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

Features

  • HTTP/1.1 and HTTP/1.0协议支持
  • 内置JSON/Protobuf序列化支持,JSON序列化框架使用Fastjson, 依赖内置;
    如果使用protobuf序列化,需要自行添加protobuf依赖, protobuf版本2.x
  • Http路由支持, 路由path支持任意的java正则表达式,通过{pathVariable:regex}这种方式支持
  • 支持文件上传
  • Spring框架支持,默认支持注解方式初始化spring容器
  • SpringBoot集成
  • 集成swagger restful API文档生成工具
  • 过滤器支持,实现类似于spring mvc的interceptor功能
  • 支持全局异常处理
  • 支持统一响应格式处理

Latest version

0.0.51

Maven

<dependency>
    <groupId>ai.houyi</groupId>
    <artifactId>dorado-core</artifactId>
    <version>${dorado.version}</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支持定义一个ai.houyi.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>ai.houyi</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来替换SpringBootApplication和EnableDorado,如下:

      @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>ai.houyi</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文档全局信息
    实现ai.houyi.dorado.swagger.ext.ApiContextBuilder接口
@Component //如果是集成spring或springboot环境的话,直接增加component注解即可
@Override
// 这里定制Api全局信息,如文档描述、license,contact等信息
public ApiContext buildApiContext() {
	Info info = new Info()
			.contact(new Contact().email("[email protected]").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下的ai.houyi.dorado.swagger.ext.ApiContextBuilder文件中增加如下配置:
ai.houyi.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>ai.houyi</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

性能测试

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].