简介
Version:1.0.0
开源地址
EasyAPI是一款轻巧快速的接口服务开发框架,基于RESTFUL架构构建的一款基于Tocmat作为容器的框架,接口文档自动化,使用json为数据传输基本格式,简单易用,学习成本低,开发效率高。
目录
如何导入
编写第一个接口
编写接口验证
使用Bean
使用Session组件
添加自定义插件
注解配置
计划
_
maven引用
<dependency>
<groupId>com.github.cloveros</groupId>
<artifactId>EasyApi</artifactId>
<version>1.0.0</version>
</dependency>
gradle引用
compile group: 'com.github.cloveros', name: 'EasyApi', version: '1.0.0'
或者点击下载框架jar包
然后添加到你项目的库中作为依赖
打开jar包,从里面将EasyApi.properties
和log4j.properties
复制出来,放到你的src目录下,
如果你使用的是gradle构建的话,需要放到resource资源目录下,或者是你自己定义的资源目录下
填写你的数据库连接(集成使用了hikari连接池,默认集成mysql连接驱动版本为8.0.11
)
jdbcUrl=jdbc:mysql://localhost/demo
driverClassName=com.mysql.cj.jdbc.Driver
dataSource.user=test
dataSource.password=test
修改log输出(可以不修改使用默认配置)
log4j.rootLogger=info,console,dailyFile
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.ImmediateFlush=true
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%p] [%t] (%F:%L) ->%m %n
log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.File=${catalina.base}/logs/cn.khthink.log
log4j.appender.dailyFile.Append=true
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%p] (%F:%L) ->%m %n
log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd-a'.log'
这样就可以开始使用了
先创建一个配置类
@EasyApiConfig
@EnableAutoConfig
@ActionPackage(value = {"cn.khthink.myaction"})
public class MyConfig extends BaseEasyConfig {
@Override
protected void init() throws Exception {
}
@Override
public void destory() {
}
@Override
public void reload() {
}
}
第一个注解为配置注解,第二个注解顾名思义是启用自动配置,第三个注解配置是接口服务的包,这里先预留写为cn.khthink.myaction
接下来在这个预留的cn.khthink.myaction
包下面创建一个HelloApi
类并继承BaseEasyAction
@Action(actionName = "hello",
actionTag = "test",
group = @ActionGroup(power = 10000, groupName = "测试模块"),
actionDesc = "helloapi")
public class HelloApi extends BaseEasyAction {
@Override
public void processData(Request request) throws Exception {
sendSuccessedEmptyDataMsg(request,"helloapi");
}
}
这里使用了Action注解,里面包含两个必要的配置,一个是actionName,一个是actionTag,这两个是作为路由路径的配置,现在启动tomcat,访问你tomcat的地址+/test/hello.json
,就可以得到以下结果
当然你也可以打开你tomcat的地址/api
访问文档首页
这就是你刚刚写的那个接口自动生成的文档
请求参数和返回参数这些都是可以进行定义的
可以在Action
注解里面添加params
和returnParams
注解分别对请求参数和返回参数进行配置
例如:
@Action(actionName = "hello",
actionTag = "test",
group = @ActionGroup(power = 10000, groupName = "测试模块"),
actionDesc = "helloapi",
params = {@ActionParam(param = "hello", paramDesc = "hello", paramExmple = "123")},
returnParams = {@ActionParam(param = "hello", paramDesc = "hello", paramExmple = "2222")})
public class HelloApi extends BaseEasyAction {
@Override
public void processData(Request request) throws Exception {
sendSuccessedEmptyDataMsg(request,"helloapi");
}
}
接着你再打开/api
之后
就可以找到你所写的参数了
正如你所想,在刚刚的那个请求参数注解的背后,就是对于接口参数的验证,现在你直接访问你刚刚所写的接口不带任何参数,那么就会得到如下结果
如果你想要让这个参数变成非必须的话,你只需要将你刚刚写的参数里面配置一下isNeed
正如这样
params = {@ActionParam(param = "hello", paramDesc = "hello", paramExmple = "123",isNeed = false)
_
使用Bean
因为框架基于json的传输,所以我们可以很方便的使用javabean来处理这些数据,在Action中,你只需要一个方法就可以获取到你接受的json的bean,当然前提是你需要新建一个bean
还是以刚才的那个接口参数
public class Hello {
private String hello;
public String getHello() {
return hello;
}
public void setHello(String hello) {
this.hello = hello;
}
}
然后我们在接受参数的时候可以这样
@Action(actionName = "hello",
actionTag = "test",
group = @ActionGroup(power = 10000, groupName = "测试模块"),
actionDesc = "helloapi",
params = {@ActionParam(param = "hello", paramDesc = "hello", paramExmple = "123", isNeed = false)},
returnParams = {@ActionParam(param = "hello", paramDesc = "hello", paramExmple = "2222")})
public class HelloApi extends BaseEasyAction {
@Override
public void processData(Request request) throws Exception {
Hello reciveData = getReciveData(Hello.class);
sendSuccessedEmptyDataMsg(request, reciveData.getHello());
}
}
然后我们访问/test/hello.json?hello=你好啊
就可以得到下面的结果
Seesion组件是框架实现的一个跟你所想的session是类似的一个组件,但是更加灵活,你需要在之前写的Action
注解中添加isSessionOpen = true
来让框架验证session
创建session
String session = EasySessionKit.getInstance().createSession(JSON.toJSON(hello).toString(), 7 * 24 * 60 * 60 * 1000);
其中第一个参数为你所需要存入的数据,这边我是用json来转换这个实体类来存入,你也可以直接存入一个类,当然前提是这个类是可序列化的。第二个参数是session的有效期限,单位是毫秒,所以我刚刚设置了7天的的有效期。session创建后会返回一个字符串,用来识别你的这个session的唯一字符串,你可以用来将它返回给前端保存
删除session
boolean b = EasySessionKit.getInstance().delSession(session);
就如刚刚说的,你需要用到刚刚生成的那个字符串来删除这个session
获取Session
当你的接口填写了session验证的时候,你可以直接使用如下方法获取你存入的信息
Hello sessionData = getSessionData(Hello.class);
或者你在Action里面也可以直接拿到父类处理完毕的sessionKey
再用这个sessionKey
去做处理。
_
添加自定义协议以及插件
@EasyProtocol
public class MyProtocol implements IEasyProtocol {
@Override
public boolean verify(Request request) {
//你需要验证的参数
//该验证在参数验证之前执行
return false;
}
}
@EasyApiConfig
@EnableAutoConfig
@WebHost(host = "localhost:8080")
@ActionPackage(value = {"cn.khthink.demo.myaction"})
public class MyConfig extends BaseEasyConfig {
@Override
protected void init() throws Exception {
//自定义插件初始化
}
@Override
public void destory() {
//自定义插件销毁
}
@Override
public void reload() {
//自定义插件重新加载
}
}
Action
注解
/**
* 处理器名称
*
* @return
*/
String actionName();
/**
* 处理器标识
*
* @return
*/
String actionTag();
/**
* 组
*
* @return
*/
ActionGroup group();
/**
* 处理器作者
*
* @return
*/
String Auther() default "kh";
/**
* 处理器描述
*
* @return
*/
String actionDesc() default "";
/**
* 处理器参数描述
*
* @return
*/
ActionParam[] params() default {};
/**
* 处理器返回参数描述
*
* @return
*/
ActionParam[] returnParams() default {};
/**
* 是否开启接口缓存
*
* @return
*/
boolean isCache() default false;
/**
* 是否开启session验证
*
* @return
*/
boolean isSessionOpen() default false;
/**
* 是否开启token验证
*
* @return
*/
boolean isToken() default false;
ActionGroup
注解
/**
* 权限Id
*
* @return
*/
int power() default 1000;
/**
* 组名
*
* @return
*/
String groupName() default "";
ActionParam
注解
/**
* 参数名
*
* @return
*/
String param() default "";
/**
* 参数类型
*
* @return
*/
ParamType type() default ParamType.STRING;
/**
* 参数描述
*
* @return
*/
String paramDesc() default "";
/**
* 参数例子
*
* @return
*/
String paramExmple() default "";
/**
* 参数默认值
*
* @return
*/
String defaultValue() default "";
/**
* 参数是否必须
*
* @return
*/
boolean isNeed() default true;
更多注解在cn.khthink.easyapi.annotation.config下,每个注解都有注释,顾名思义
_
计划
- 更多的使用框架容器去管理处理器
- 添加分布式管理以及管理页面
- 添加动态加载方便调试
- 添加容器管理页面
这个就很好了,支持一波!