数据服务实践
构建API集市,实现接口复用
为了实现接口的复用,我们需要构建 API 的集市,应用开发者可以直接在 API 集市发现已有的数据接口,直接申请该接口的 API 权限,即可访问该数据,不需要重复开发
操作流程
- 步骤一:创建数据源并配置网络连通性
使用数据服务创建API前,需先将您的数据库或数据仓库添加为DataWorks数据源,以此作为数据服务API的数据来源。开发数据服务API时,数据服务将访问该数据源获取数据表的Schema信息,帮助您进一步设置请求和返回参数。调用数据服务API时,数据服务将访问该数据源来执行查询请求。 - 步骤二:创建API分组
数据服务基于API网关对外提供服务。在API网关中,分组是API的管理单元,并与调用地址的域名相关联。因此,在数据服务中创建API前,需先在API网关创建API分组。 - 步骤三:新建业务流程
数据服务基于业务流程实现以业务为单元的数据服务API开发,并通过业务流程对API及创建API所使用的函数等文件进行组织管理。因此,在数据服务创建API前,需先新建业务流程。 - 步骤四:生成API
业务流程创建完成后,您可基于该业务流程创建相应业务的API。 - 步骤五:测试API
已创建的API需进行测试运行,测试通过后,该API才可发布上线。 - 步骤六:发布API
通过测试的API需发布上线,发布成功后,其他服务才可调用该API。 - 步骤七:调用API
数据服务支持使用简单身份认证及加密身份认证调用数据服务API。 - 步骤八:查看与管理API
发布上线的API可在服务管理页面查看,同时,数据服务支持根据业务需求进行下线、授权及查看API调用详情等管理操作。
技术实现
- 流控策略:单位时长内API调用限制(次)
拦截器+redis+lua脚本实现redis操作原子性 - 访问策略:黑白名单
拦截器 - 报警策略:根据告警规则触发微信或者飞书告警,告警规则如:平均响应时间,错误率,慢查询
- api授权应用
拦截器进行token的判断;
api授权对象是应用而不是用户,可利用AppKey和AppSecret密钥对实现,AppKey需要在请求时作为参数在Header传入,AppSecret需要用于计算请求签名; - 行列级权限
权限管理(权限表设计)
数据查询
拦截器+jdbc查询
开源产品
详细Gitee链接freakchicken/DBApi
优点:
- 开箱即用,不需要编程,单机模式不需要依赖其他软件(只需要java运行环境)
- 支持单机模式、集群模式,支持windows Linux Mac
- 支持动态创建、修改API;动态创建、修改数据源。热部署全程无感。
- 支持API级别的访问权限控制,支持IP白名单、黑名单控制
- 支持所有类型数据库(JDBC协议),包括mysql/sqlserver/postgreSql/hive/oracle等等
- 支持动态sql,类似mybatis的动态sql,支持sql编辑、运行、调试
- 丰富的插件扩展,支持缓存、数据转换、失败告警
- 支持API配置导入导出,方便测试环境到生产环境的API迁移
- 支持一个接口内多条SQL执行(例如分页功能),支持事务开启关闭
- 支持复杂嵌套json传参
- 支持接口调用记录查询,接口访问信息统计
其主要存在以下缺陷: - DBAPI项目权限系统较简单,只能针对某一个接口进行权限进行管理,不能针对API组及用户进行权限进行管理
- DBAPI在定义API过程中选择库表会进行全库全表进行扫描,过程速度慢
- DBAPI没有API监控审计模块,不能直观看到API调用情况
- DBAPI没有API限流,灰度发布等,集成的spring gateway功能有限
- 其主要是通过Sql去实现API的创建,暂时不支持向导模式及注册API
- 同时对于黑白名单的控制,仅能做到所有API设置黑白名单,不支持单个API控制黑白名单
https://gitee.com/ZhuGeZiFang/dataService
https://gitee.com/ecar_team/apimonitor
https://gitee.com/freakchicken/db-api
参考链接:
觉得不错的话,支持一根棒棒糖吧 ୧(๑•̀⌄•́๑)૭
wechat pay
alipay
数据服务实践
http://yuting0907.github.io/posts/70ced625.html