在富士行云V2平台中,将有很多的车场,人行项目接入。为了方便车场,人行项目运营方可以在他们自己已有的平台,或者其他第三方平台对接我们的数据,并提供数据服务。
为了实现开放平台的功能,我们需要设计一个开放平台的总体设计文档,包括功能模块、系统架构、数据库设计、接口设计、安全设计、流量监控与分析等。
本文档仅涉及开放平台的总体设计,不涉及具体的功能模块设计。
系统依赖富士行云V2整体的spring cloud微服务架构。通过gateway在新的路径前缀下路由到开放平台,在通过openfeign、nacos、load_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
}
响应参数: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
}
/openapi/interface/disable/{1}
{
"code": 1000000,
"msg": "
操作成功
",
"data": null
}
/openapi/interface/import
{
"code": 1000000,
"msg": "
操作成功
",
"data": null
}
/openapi/interface/export
{
"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"
}
]
}
/openapi/interface/{1}
{
"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"
}
}
/openapi/interface/page
参数名 |
类型 |
说明 |
是否必填 |
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"
}
]
}
}
开放平台安全校验模块负责对接车场、人行项目的安全校验,包括接口的安全校验、数据加密、数据权限校验、数据流量监控等。
/openapi/token/generate
{
"appId": "123456",
"appSecret": "123456",
"timestamp": 1610123456789,
"sign": "123456"
}
{
"code": 1000000,
"msg": "
操作成功
",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNjEwMTIzNDU2LCJleHAiOjE2MTA1MjM0NTYsInVzZXJuYW1lIjoiYWRtaW4iLCJpYXQiOjE2MTA1MjM0NTYsImV4cCI6MTYxMDUyMzQ1NiwiaWF0IjoxNjEwMTIzNDU2LCJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}
}
字段名 |
参数名称 |
类型 |
能否为空 |
说明 |
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 接口表的主键 |