在富士行云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 接口表的主键 |