开放平台总体设计文档

概述

背景

在富士行云V2平台中,将有很多的车场,人行项目接入。为了方便车场,人行项目运营方可以在他们自己已有的平台,或者其他第三方平台对接我们的数据,并提供数据服务。

目标

为了实现开放平台的功能,我们需要设计一个开放平台的总体设计文档,包括功能模块、系统架构、数据库设计、接口设计、安全设计、流量监控与分析等。

范围

本文档仅涉及开放平台的总体设计,不涉及具体的功能模块设计。

总体设计

系统架构

系统依赖富士行云V2整体的spring cloud微服务架构。通过gateway在新的路径前缀下路由到开放平台,在通过openfeignnacosload_balance等组件实现服务间的调用。

具体实现就利用我们现有的中台服务(transferService)。在中台服务上面去建立一个新的目录(openapi),在openapi目录下建立应用管理、接口管理、开发接口三个模块。

功能模块

开放平台用户管理

对接方需要注册开放平台用户,用户去绑定应用,一个用户可以创建一个或者多个应用。应用去绑定项目,应用也可以绑定一个或者多个项目。

注册用户
{
    "username": "13800000000",
    "password": "123456",     //前端传入的应该是rsa加密的后的密码
    "phoneNumber": "13800000000",
    "nikeName": "admin"
}

响应参数:JSON格式

响应示例:

{
  "code": 1000000,
  "msg": "操作成功",
  "data": {
    "id": 1,
    "username": "13800000000",
    "phoneNumber": "13800000000",
    "nikeName": "admin",
    "createTime": "2019-08-30 17:56:40",
    "updateTime": "2019-08-30 17:56:40"
  }
}
修改密码
{
    "oldPassword": "123456",      //前端传入的应该是rsa加密的后的旧密码
    "newPassword": ""  //前端传入的应该是rsa加密的后的新密码
}

响应参数:JSON格式

响应示例:

{
  "code": 1000000,
  "msg": "操作成功"
}
重置密码
{
    "userId": 1,
    "newPassword": "123456",  //前端传入的应该是rsa加密的后的新密码
    "smsCode": "1234"   //短信验证码
}
用户登录
{
  "username": "13800000000",
  "password": "123456",  //前端传入的应该是rsa加密的后的密码
  "verfiyCode": "1234"  //验证码
}

响应参数:JSON格式

响应示例:

{
  "code": 1000000,
  "msg": "操作成功",
  "data": {
    "token": ""      //除了登录  其他的开放平台用户操作都需要带上这个token
  }
}
退出登录

响应参数:JSON格式

响应示例:

{
  "code": 1000000,
  "msg": "操作成功"
}
获取用户信息

响应参数:JSON格式

响应示例:

{
  "code": 1000000,
  "msg": "操作成功",
  "data": {
    "id": 1,
    "username": "13800000000",
    "phoneNumber": "13800000000",
    "nikeName": "admin",
    "createTime": "2019-08-30 17:56:40",
    "updateTime": "2019-08-30 17:56:40"
  }
}
获取用户分页列表
{
 "current": 1,
  "size": 10,
  "username": "13800000000",
  "nikeName": "admin",
  "phoneNumber": "13800000000"
}

响应参数:JSON格式

响应示例:

{
  "code": 1000000,
  "msg": "操作成功",
  "data": [
    {
      "id": 1,
      "username": "13800000000",
      "phoneNumber": "13800000000",
      "nikeName": "admin",
      "createTime": "2019-08-30 17:56:40",
      "updateTime": "2019-08-30 17:56:40"
    }
  ]
}
用户注销

响应参数:JSON格式

响应示例:

{
  "code": 1000000,
  "msg": "操作成功"
}

开放平台应用管理

开放平台应用管理模块负责对接车场、人行项目的应用,包括应用的注册、认证、授权、管理等。

新增应用

在系统添加一个应用,用于对接车场、人行项目的开放接口。需要输入应用名称、服务行业、应用描述、应用logo、用户名(负责人)、手机号码。

具体参数表格如下:

字段名

参数名称

类型

说明

是否必填

name

应用名称

字符串

应用名称

serviceType

服务行业

字符串

服务行业

remark

应用描述

字符串

应用描述

logo

应用logo

字符串

应用logo oss key

userId

用户id

字符串

开放平台用户id

{
"name": "车场应用",
"serviceType": "车场",
"remark": "车场应用",
"logo": "osskey",
"userId": 1
}

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": {
        "id": 1,
        "name": "车场应用",
        "serviceType": "车场",
        "remark": "车场应用",
        "logo": "osskey",
        "userId": 1,
        "createTime": "2021-01-01 00:00:00",
        "updateTime": "2021-01-01 00:00:00",
        "expirationTime " : "2021-01-01 00:00:00",
        "status" : 1 // 0启用 1禁用
    }
}
绑定项目

body 体中参数

{
    "projectIds": [1,2,3]
}

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
配置接口

body 体中参数

{
    "interfaceIds": [1,2,3]
}

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
修改有效期

body 体中参数

{
    "expirationTime": "2021-01-01 00:00:00"
}

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
禁用应用

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
启用应用

响应参数:JSON格式

响应示例:

{
  "code": 1000000,
  "msg": "操作成功",
  "data": null
}
删除应用

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
重置应用秘钥

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
重置签名密钥
{
    "expirationTime": "2021-01-01 00:00:00"
}

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
重置永久token

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
修改通知回调地址
{
    "callbackAddress": "2021-01-01 00:00:00"
}

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
查询详情

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": {
        "id": 1,
        "name": "车场应用",
        "serviceType": "车场",
        "remark": "车场应用",
        "logo": "osskey",
        "userName": "admin",
        "phoneNumber": "13800138000",
        "createTime": "2021-01-01 00:00:00",
        "updateTime": "2021-01-01 00:00:00",
        "createUser": "admin",
        "updateUser": "admin",
        "expirationTime": "2021-01-01 00:00:00",
        "status": 1 // 0启用 1禁用
    }
}
查询应用列表(分页)

参数名

类型

说明

是否必填

current

int

页码

size

int

每页条数

name

string

应用名称

serviceType

string

服务行业

status

int

状态

phoneNumber

string

手机号码

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": {
      "total": 10,
      "pages": 20,
      "current": 1,
      "size": 10,
      "records": [
            {
                "id": 1,
                "name": "车场应用",
                "serviceType": "车场",
                "remark": "车场应用",
                "logo": "osskey",
                "userName": "admin",
                "phoneNumber": "13800138000",
                "createTime": "2021-01-01 00:00:00",
                "updateTime": "2021-01-01 00:00:00",
                "createUser": "admin",
                "updateUser": "admin",
                "expirationTime": "2021-01-01 00:00:00",
                "status": 1 // 0启用 1禁用
            }
        ]
    }
}

开放平台接口管理

开放平台数据接口管理模块负责对接车场、人行项目的接口,包括接口的注册、认证、授权、管理等。我们将配置两类接口,一个是上行接口,一个是下行接口。

新增接口

开放平台对外提供的接口,包括车场、人行项目的接口。都是在这里添加。需要的参数有,接口名称,路径,请求方式,接口类型,版本,发布状态,接口展示文档,启用状态,访问限制次数。

具体参数表格如下:

字段名

参数名称

类型

说明

是否必填

name

接口名称

字符串

接口名称

path

路径

字符串

接口路径

method

请求方式

字符串

请求方式 POST PUT GET DELETE

type

接口类型

int

接口类型 0 上行 1 下行

serviceType

业务类型

int

1 车位 2 支付 3 月卡 4 车场 5 优惠券

version

版本

字符串

版本号 v1 v2 ...

status

发布状态

int

发布状态 0 未发出 1 已发布

doc

接口展示文档

字符串

接口展示文档 markdown格式

enable

启用状态

int

启用状态 0 启用 1 禁用

limitCount

访问限制次数

int

每秒访问限制次数

{
    "name": "车场接口",
    "path": "/api/v1/car/parking",
    "method": "GET",
    "type": 0,
    "serviceType": 1,
    "version": "v1",
    "doc": "",
    "limitCount": 100
}

响应参数:JSON格式

{
    "code": 1000000,
    "msg": "操作成功",
    "data": {
        "id": 1,
        "name": "车场接口",
        "path": "/api/v1/car/parking",
        "method": "GET",
        "type": 0,
        "serviceType": 1,
        "version": "v1",
        "status": 1,
        "doc": "",
        "enable": 1,
        "limitCount": 100,
        "createTime": "2021-01-01 00:00:00",
        "updateTime": "2021-01-01 00:00:00",
        "createUser": "admin",
        "updateUser": "admin"
    }
}
编辑接口
{
    "name": "车场接口",
    "path": "/api/v1/car/parking",
    "method": "GET",
    "type": 0,
    "serviceType": 1,
    "version": "v1",
    "doc": "",
    "limitCount": 100
}

响应参数:JSON格式

{
    "code": 1000000,
    "msg": "操作成功",
    "data": {
        "id": 1,
        "name": "车场接口",
        "path": "/api/v1/car/parking",
        "method": "GET",
        "type": 0,
        "serviceType": 1,
        "version": "v1",
        "status": 1,
        "doc": "",
        "enable": 1,
        "limitCount": 100,
        "createTime": "2021-01-01 00:00:00",
        "updateTime": "2021-01-01 00:00:00",
        "createUser": "admin",
        "updateUser": "admin"
    }
}
删除接口

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
配置接口文档
{
    "doc": "接口文档"
}

响应参数:JSON格式

响应示例:

{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
发布接口

响应参数:JSON格式

{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
禁用接口
{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
导入接口
{
    "code": 1000000,
    "msg": "操作成功",
    "data": null
}
导出接口
{
    "ids" : "1,2,3" //多个接口id用逗号隔开。不传则导出全部
}
{
    "code": 1000000,
    "msg": "操作成功",
    "data": [
        {
            "id": 1,
            "name": "车场接口",
            "path": "/api/v1/car/parking",
            "method": "GET",
            "type": 0,
            "serviceType": 1,
            "version": "v1",
            "status": 1,
            "doc": "",
            "enable": 1,
            "limitCount": 100,
            "createTime": "2021-01-01 00:00:00",
            "updateTime": "2021-01-01 00:00:00",
            "createUser": "admin",
            "updateUser": "admin"
        }
    ]
}
查询详情
{
    "code": 1000000,
    "msg": "操作成功",
    "data": {
        "id": 1,
        "name": "车场接口",
        "path": "/api/v1/car/parking",
        "method": "GET",
        "type": 0,
        "serviceType": 1,
        "version": "v1",
        "status": 1,
        "doc": "",
        "enable": 1,
        "limitCount": 100,
        "createTime": "2021-01-01 00:00:00",
        "updateTime": "2021-01-01 00:00:00",
        "createUser": "admin",
        "updateUser": "admin"
    }
}
查询接口列表(分页)

参数名

类型

说明

是否必填

current

int

页码

size

int

每页条数

name

string

应用名称

serviceType

string

服务行业

status

int

状态

path

string

访问路径

{
    "code": 1000000,
    "msg": "操作成功",
    "data": {
        "total": 10,
        "pages": 20,
        "current": 1,
        "size": 10,
        "records": [
            {
                "id": 1,
                "name": "车场接口",
                "path": "/api/v1/car/parking",
                "method": "GET",
                "type": 0,
                "serviceType": 1,
                "version": "v1",
                "status": 1,
                "doc": "",
                "enable": 1,
                "limitCount": 100,
                "createTime": "2021-01-01 00:00:00",
                "updateTime": "2021-01-01 00:00:00",
                "createUser": "admin",
                "updateUser": "admin"
            }
        ]
    }
}

开放平台安全管理

开放平台安全校验模块负责对接车场、人行项目的安全校验,包括接口的安全校验、数据加密、数据权限校验、数据流量监控等。

token生成
{
    "appId": "123456",
    "appSecret": "123456",
    "timestamp": 1610123456789,
    "sign": "123456"
}
{
    "code": 1000000,
    "msg": "操作成功",
    "data": {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNjEwMTIzNDU2LCJleHAiOjE2MTA1MjM0NTYsInVzZXJuYW1lIjoiYWRtaW4iLCJpYXQiOjE2MTA1MjM0NTYsImV4cCI6MTYxMDUyMzQ1NiwiaWF0IjoxNjEwMTIzNDU2LCJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
    }
}
token校验
签名方式
签名校验
接口权限校验
接口流量监控

数据库设计

应用管理表

字段名

参数名称

类型

能否为空

说明

id

主键

int

应用id

name

应用名称

varchar(16)

应用名称

app_id

应用id

varchar(32)

应用id

app_secret

应用密钥

varchar(32)

应用密钥

status

应用状态

int

应用状态 0 禁用 1 启用

create_time

创建时间

datetime

创建时间

update_time

更新时间

datetime

更新时间

user_id

创建人

varchar(16)

创建人

expiration_time

过期时间

datetime

过期时间

is_delete

是否已删除

int

0 正常 1 已删除

remark

备注

varchar(255)

备注

应用项目关联表

字段名

参数名称

类型

能否为空

说明

id

主键

int

主键

app_id

应用id

varchar(32)

应用id 应用表的主键

project_id

项目id

int

项目id 对应项目表的主键

接口管理表

字段名

参数名称

类型

能否为空

说明

id

主键

int

接口id

name

接口名称

varchar(16)

接口名称

path

接口路径

varchar(128)

接口路径

method

请求方式

varchar(16)

请求方式

type

接口类型

int

接口类型 0 上行 1下行

service_type

服务类型

int

1 车位 2 支付 3 月卡 4 车场 5 优惠券

version

版本号

varchar(16)

版本号 v1 v2

doc

接口文档

text

接口文档

status

接口状态

int

接口状态 0 禁用 1 启用

enable

是否启用

int

是否启用 0 禁用 1 启用

limit_count

限制次数

int

限制次数

create_time

创建时间

datetime

创建时间

update_time

更新时间

datetime

更新时间

create_user

创建人

varchar(16)

创建人

update_user

更新人

varchar(16)

更新人

is_delete

是否已删除

int

0 正常 1 已删除

remark

备注

varchar(255)

备注

应用接口授权关联表

字段名

参数名称

类型

能否为空

说明

id

主键

int

主键

app_id

应用id

varchar(32)

应用id 应用表的主键

interface_id

接口id

int

接口id 接口表的主键

安全管理redis数据结构设计