easyopen 1.0.3 发布,简单易用的接口平台

tanghc
 tanghc
发布于 2018年02月23日
收藏 27

easyopen 1.0.3 发布,此次更新内容有:

  • 调整文档页面样式

  • 代码优化,完善注释

easyopen的由来

一次偶然的机会了解到淘宝开放平台,比较喜欢它的API调用方式(介绍),京东开放平台也是用此类似方式。它的所有接口只提供一个URL链接,然后通过参数名来区分不同的接口。做过web开发的都知道,一般一个接口url对应后台程序是一个方法,比如springmvc中Controller的一个方法。那么只提供一个url,它是如何来区分具体的哪个方法呢。因为没有看到源码不敢下结论,这里我只想到了两种思路:

第一种方法:服务端做个代理,然后具体请求到对应url

比如客户端请求url是:http://xxx/api/rest?name=goods.get,代理服务器拿到name转发到http://xxx/api/rest/get_goods。也就是说要将goods.get和http://xxx/api/rest/get_goods关联起来。

第二种方法:服务端将goods.get跟方法关联起来

这个怎么关联呢,可以在方法上加一个注解@Api(name="goods.get"),然后服务启动的时候扫描这个类,找到方法,找到方法后就能找到对应@Api注解,拿到name,然后通过一个Map<name,MethodInfo>把他们关联起来。

关联起来后,如何调用呢?客户端请求过来是可以拿到name的,然后通过name找到对应的MethodInfo,就可以进行invoke操作了。整个流程走通之后接着就可以做其它的事情了,比如数字签名验证等功能。

其实这种思想有点类似springmvc的原理,是行得通的。如果用springmvc实现的话,就只有一个Controller,伪代码如下:

@RequestMapping(method = RequestMethod.POST)
    public void index(HttpServletRequest request, HttpServletResponse response) throws Throwable {
        
        String name = request.getParameter("name");

        MethodInfo methodInfo = map.get(name);

        Param param = methodInfo.getParam();

        param.validate(); // 校验

        Object obj = methodInfo.invoke(); // 执行
        writeResult(obj); // 返回结果
}

easyopen的实现原理就是第二种方法。可以看到这种设计的一个好处是可以做到统一的参数校验,统一的结果返回。开发人员只需要写好service层的代码即可。

easyopen的功能

  • 开箱即用,写完业务代码直接启动服务即可使用,无需其它配置。

  • 参数自动校验,支持国际化参数校验(JSR-303)。

  • 校验功能和结果返回功能实现各自独立,方便自定义实现或扩展。

  • 采用注解来定义接口,维护简单方便。

  • 支持i18n国际化消息返回。

  • 自动生成文档页面,类似swagger。

  • 采用数字签名进行参数验证,签名算法见:easyopen\签名算法.txt。

  • 采用appKey-secret形式接入平台,即需要给接入方提供一个appKey和secret。

更多功能可参考开发文档,在最下方。

结构图

easyopen结构图

文档页面

文档页面

文档页面一般提供给客户端,开发人员也可以进行一些简单测试。

easyopen项目托管在了码云:

地址:https://gitee.com/durcframework/easyopen  
开发文档:http://durcframework.gitee.io/easyopen

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:easyopen 1.0.3 发布,简单易用的接口平台
加载中
返回顶部
顶部