MENU

EasyApi,轻巧快速的接口服务开发框架

June 18, 2018 • Jakarta

简介


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.propertieslog4j.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注解里面添加paramsreturnParams注解分别对请求参数和返回参数进行配置

例如:

@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=你好啊
就可以得到下面的结果

_
使用Session组件

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下,每个注解都有注释,顾名思义
_
计划

  1. 更多的使用框架容器去管理处理器
  2. 添加分布式管理以及管理页面
  3. 添加动态加载方便调试
  4. 添加容器管理页面
Last Modified: June 22, 2018
Archives QR Code
QR Code for this page
Tipping QR Code
Leave a Comment

已有 1 条评论
  1. 这个就很好了,支持一波!