如何设计一个通用的开放平台下-数据存储

前言

此开放平台的设计文档分为上、中、下三篇来说明,分别对应概念与总体流程、关键逻辑、数据存储三部分。

存储设计

存储方面,结合前文提到的功能和需求,这里以mysql库为例子,做一个表设计,默认表不使用外键,同时使用utf8mb4作为编码存储;除非特殊说明,默认所有字段非空;除开开发者,开放平台本身运维需要一些运营、开发人员,此部分设计同大多数的后台管理系统一致,本文不涉及。

通用字段

  • status 通用状态

    • -1 = 删除 ( 不可读, 不可写 )

    • 0 = 禁用 ( 可读 , 不可写 )

    • 1 = 正常/ 审核通过 ( 可读 , 可写 )

    • 2 = 待审核 ( 资料/申请 提交 , 待审核)

数据库

developer 开发者账号

  • 开发者要接入开放平台,则需要成为开放平台的用户,需要注册对应的账号,等待审核通过
  • 当申请成功成为开发者后就可以使用开发平台的功能,更多字段根据需要添加
字段属性默认值索引说明
idbigint(20)pk
namevarchar(20)用户名称
statustinyint(4)1用户状态
createddatetime创建时间
updateddatetime更新时间

org (第三方)主体

保存第三方的主体信息,通常是机构、学校等。开发者创建账号成功后,登录平台创建对应的主体。

字段属性默认值索引说明
idbigint(20)pk
developer_idbigint(20)unique开发者id,此主体的超管
org_codevarchar(40)unique第三方主体code
org_namevarchar(100)第三方主体名称
addressvarchar(255)联系地址
context_infotext上下文信息
status2btree

字段说明:

  • org_code 在整个开发平台中唯一标志第三方主体
  • context_info 记录第三方的扩展信息, 方便审核时使用,例如营业执照图片、门店照片
{
  "version": 1 ,
  "data":{
      "images":["http://abcd.jpg"]
  }
}

org_app 主体应用表

主体创建的多个应用表,一个主体创建多个应用;一个应用只能属于一个主体。

字段属性默认值索引说明
idbigint(20)pk
app_keyvarchar(20)btree第三方应用key
app_secretvarchar(100)第三方应用密钥
org_codevarchar(40)btree第三方账号code
namevarchar(50)第三方应用名称
request_frequency_limitint(11)单位时间间隔访问次数限制
creator_idbigint(20)创建人
update_user_idbigint(20)更新人
createddatetime创建时间
updateddatetime更新时间

说明:

  • request_frequency_limit 访问频率限制,这个是对当前应用的访问频率控制
    • 例如 1000/s = 每秒最大1000次 ; 100000/m = 每分钟最大100000次;
    • 建议根据实际需求自行定义格式与解析方式
    • 如果要求精确到 应用-接口 级别,可以自行扩展。

developer_app 开发者关联的应用

  • 应用的创建人(超管), 即主体人可以向其余的开发者授权某些应用 .

  • 同时支持对这些应用的操作权限授权. 如读 / 读写 两种 .

  • 是管理员则可以给普通开发者授权( 通过账号 ) , 普通开发者之间无法授权 .

    • 默认一个应用只有一个管理员, 就是应用关联的主体账号关联的开发者 .
  • 如有需要可以对权限值以及级联授权模型、甚至关联权限组来做扩展,形成复杂的授权体系 .

字段属性默认值索引说明
idbigint(20)pk
app_keyvarchar(20)btree第三方应用key
developer_idbigint(20)btree开发者账号id
admintinyint(4)0是否是管理员
permission_valueintbtree权限值
creator_idbigint(20)创建人
update_user_idbigint(20)更新人
createddatetime创建时间
updateddatetime更新时间

字段说明:

  • admin 是否是管理员

    • 1 = 是
    • 0 = 否
  • permission_value 权限值 ( 读写 = 1 + 2 = 3)

    • 1 = 读
    • 2 = 写

app_publish 应用发布表

  • 主要记录应用的上架和下架信息
字段属性默认值索引说明
idbigint(20)pk
app_keyvarchar(20)btree第三方应用key
app_versionvarchar(20)应用的版本
open_versionvarchar(20)btree适用的开方平台版本
file_urlvarchar(255)文件地址 , 默认相对路径
file_sizeint(11)app大小 , 单位字节
file_namevarchar(255)文件名称
audit_user_idbigint(20)审核人
aduit_timedatetime(3)审核时间
statustinyint(4)btree当前状态
creator_idbigint(20)创建人
update_user_idbigint(20)更新人
createddatetime创建时间
updateddatetime更新时间

说明 :

  • 这里记录所有的应用的上架和下架情况, 默认第三方上传的应用需要审核 , 审核通过的应用会上架的智慧教育开放平台.
  • 一个应用默认只有一个正常状态的上架应用,保证对外提供的只有一个版本的应用。
  • audit_user_id = 开放平台负责审核工作的人员

api_category api的分类

  • 对api进行分类,方便管理; 通常按照业务模块 进行分类;
  • 假设这是一个企业组织架构业务相关的开放平台,可以分为
    • 部门接口
    • 用户接口
    • 职位接口
    • and more
字段属性默认值索引说明
idbigint(20)pk
codevarchar(20)unique分类的code
namevarchar(50)分类的名称

api_resource 接口资源表

  • 该表包含了提供的所有可以提供功能的接口
字段属性默认值索引说明
idbigint(20)pk
urivarchar(255)接口路径uri
api_category_codevarchar(20)btree分类的code
namevarchar(50)接口名称
statustinyint(4)btree接口状态

app_permission 应用权限表

  • 不同的app具有不同的权限,再简略情况下可以不需要此功能,可默认具有全部权限
字段属性默认值索引说明
idbigint(20)pk
app_keyvarchar(20)第三方应用key
apply_typetinyint(4)申请的类型
apply_valuevarchar(30)申请的值
  • 当前有权限的在表中有对应记录 , 无权限的物理删除 .

  • key、type、value 需要做三个字段的联合索引,对于接口权限建议全部缓存; 数据权限一般存储的数据量较大,建议查表。

字段说明:

  • apply_type 申请的类型 , 此为申请需要通过的权限类型

    • 1 = api 的 url申请
    • 2 = api 的category 分类批量申请
    • 3 = 数据权限 , 例如部门id
    • 4 = 数据权限 , xxxxx
  • apply_value , 申请的 apply_type 类型对应的值 ; json对象

    • 当 apply_type = 1 , 其值为 api_resource 的id
    • 当 apply_type = 2 , 其值为 api_category_code 的值
    • 当 apply_type = 3 , 其值为 部门ID
    • 当 apply_type = 4,其值为 xxxxx ID

permission_aduit_record 权限审核记录

此表主要在第三方发起 申请后 , 对申请做审核处理的记录 . 审核的结果会定期清理.

默认清理 1月前的申请 .

字段属性默认值索引说明
idbigint(20)pk
app_keyvarchar(20)btree第三方应用key
apply_typetinyint(4)btree申请的类型
apply_valuestext申请的值
developer_idbigint(20)-1btree开发者id
createddatetime创建时间,申请的时间

字段说明:

  • apply_type 同 third_permission表中字段 .

  • apply_values , JSON数组 , 保存的内容为third_permission表中字段与apply_type对应的 apply_value的值.

  • developer_id 如果是系统自动生成则使用默认值 -1 .

ip_white ip白名单表

字段属性默认值索引说明
idbigint(20)pk
ipvarchar(255)ip
app_keyvarchar(20)btree第三方应用key
  • 第三方哪些ip可以访问平台接口 , 可以配置多个白名单 .
  • 可以通过配置来限制 数量, 比如限制最多10个 .
  • 可以将ip字段扩展为正则表达式,方便批量多个(但是如此键值10个就没有意义了)

access_log 访问日志表

  • 考虑访问的频繁性质 , 使用异步同步的方案来实现日志的处理 .

    • 日志在开始和结束时先保存到队列中, 最后同步到数据库(对于日志,小批量可以录入mysql,数据量很大的情况下可以根据实际情况选择数据库).
字段属性默认值索引说明
idbigint(20)pk
request_idvarchar(32)请求流水号
app_keyvarchar(20)btree第三方应用key
urivarchar(60)请求资源的uri
request_headertext请求头
request_bodytext请求body
response_bodytext返回body
access_timebigint(13)btree请求时间
response_timebigint(13)响应时间
expend_timebigint(13)耗时
ipvarchar(255)访问者ip
successtinyint(4)是否成功(0-否,1-是)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值