12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208 |
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>开放平台总体设计文档</title>
- <style>
- body {
- font-family: Arial, sans-serif;
- line-height: 1.6;
- margin: 20px;
- }
- h1, h2, h3, h4, h5, h6 {
- color: #2c3e50;
- }
- table {
- width: 100%;
- border-collapse: collapse;
- margin-bottom: 20px;
- }
- table, th, td {
- border: 1px solid #ddd;
- }
- th, td {
- padding: 8px;
- text-align: left;
- }
- th {
- background-color: #f2f2f2;
- }
- code {
- background-color: #f4f4f4;
- padding: 2px 4px;
- border-radius: 4px;
- }
- pre {
- background-color: #f4f4f4;
- padding: 10px;
- border-radius: 4px;
- overflow-x: auto;
- }
- </style>
- </head>
- <body>
- <h1>开放平台总体设计文档</h1>
- <h2>概述</h2>
- <h3>背景</h3>
- <p>在富士行云V2平台中,将有很多的车场,人行项目接入。为了方便车场,人行项目运营方可以在他们自己已有的平台,或者其他第三方平台对接我们的数据,并提供数据服务。</p>
- <h3>目标</h3>
- <p>为了实现开放平台的功能,我们需要设计一个开放平台的总体设计文档,包括功能模块、系统架构、数据库设计、接口设计、安全设计、流量监控与分析等。</p>
- <h3>范围</h3>
- <p>本文档仅涉及开放平台的总体设计,不涉及具体的功能模块设计。</p>
- <h2>总体设计</h2>
- <h3>系统架构</h3>
- <p>系统依赖富士行云V2整体的spring cloud微服务架构。通过gateway在新的路径前缀下路由到开放平台,在通过openfeign、nacos、 load_balance 等组件实现服务间的调用。</p>
- <p>具体实现就利用我们现有的中台服务(transferService). 在中台服务上面去建立一个新的目录(openapi),在openapi目录下建立应用管理、接口管理、开发接口三个模块。</p>
- <h3>功能模块</h3>
- <h4>开放平台用户管理</h4>
- <h4>开放平台应用管理</h4>
- <p>开放平台应用管理模块负责对接车场、人行项目的应用,包括应用的注册、认证、授权、管理等。</p>
- <h5>新增应用</h5>
- <p>在系统添加一个应用,用于对接车场,人行项目的开放接口。</p>
- <p>需要输入应用名称、服务行业、应用描述、应用logo、用户名(负责人)、手机号码。</p>
- <p>具体参数表格如下:</p>
- <table>
- <thead>
- <tr>
- <th>字段名</th>
- <th>参数名称</th>
- <th>类型</th>
- <th>说明</th>
- <th>是否必填</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>name</td>
- <td>应用名称</td>
- <td>字符串</td>
- <td>应用名称</td>
- <td>是</td>
- </tr>
- <tr>
- <td>serviceType</td>
- <td>服务行业</td>
- <td>字符串</td>
- <td>服务行业</td>
- <td>是</td>
- </tr>
- <tr>
- <td>remark</td>
- <td>应用描述</td>
- <td>字符串</td>
- <td>应用描述</td>
- <td>否</td>
- </tr>
- <tr>
- <td>logo</td>
- <td>应用logo</td>
- <td>字符串</td>
- <td>应用logo 存oss key</td>
- <td>否</td>
- </tr>
- <tr>
- <td>userName</td>
- <td>用户名</td>
- <td>字符串</td>
- <td>负责人用户名</td>
- <td>是</td>
- </tr>
- <tr>
- <td>phoneNumber</td>
- <td>手机号码</td>
- <td>字符串</td>
- <td>负责人手机号码</td>
- <td>是</td>
- </tr>
- </tbody>
- </table>
- <p>接口地址:/openapi/app/add</p>
- <p>请求方式:POST</p>
- <p>请求参数:JSON格式</p>
- <pre><code>{
- "name": "车场应用",
- "serviceType": "车场",
- "remark": "车场应用",
- "logo": "osskey",
- "userName": "admin",
- "phoneNumber": "13800138000"
- }</code></pre>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "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禁用
- }
- }</code></pre>
- <h5>绑定项目</h5>
- <p>新增的应用是没有绑定项目的,需要绑定项目才能使用接口。</p>
- <p>通过调用系统服务获取到项目列表,选择需要绑定的项目,点击绑定按钮。</p>
- <p>可以绑定多个项目</p>
- <p>接口地址:/openapi/app/bind/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:JSON格式</p>
- <p>body 体中参数</p>
- <pre><code>{
- "projectIds": [1,2,3]
- }</code></pre>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }</code></pre>
- <h5>配置接口</h5>
- <p>新增的应用是没有配置接口的,需要配置授权了接口,才能访问到这些开放接口。</p>
- <p>通过接口关联查询得到接口列表,选择需要配置的接口,点击配置按钮。</p>
- <p>可以配置多个接口,可以选择全部配置、部分配置。</p>
- <p>接口地址:/openapi/app/config/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:JSON格式</p>
- <p>body 体中参数</p>
- <pre><code>{
- "interfaceIds": [1,2,3]
- }</code></pre>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }</code></pre>
- <h5>修改有效期</h5>
- <p>应用的有效期是可以修改的,可以根据需要修改。</p>
- <p>应用有效期过了,则该应用不能通过开放接口访问</p>
- <p>接口有效期可以修改比当前有效期以前,也可以修改比当前有效期以后。</p>
- <p>如果有效期修改在当前时间以前,也是运行的,则等于直接失效了。</p>
- <p>接口地址:/openapi/app/expiration/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:JSON格式</p>
- <p>body 体中参数</p>
- <pre><code>{
- "expirationTime": "2021-01-01 00:00:00"
- }</code></pre>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }</code></pre>
- <h5>禁用应用</h5>
- <p>平台新创建的应用一开始是禁用状态的。需要平台认为的开启才可以使用。</p>
- <p>平台也可以在之后禁用应用,禁用后该应用不能通过开放接口访问</p>
- <p>接口地址:/openapi/app/disable/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:路径参数</p>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }</code></pre>
- <h5>启用应用</h5>
- <p>应用处于禁用状态时,需要平台认为的开启才可以使用。</p>
- <p>接口地址:/openapi/app/enable/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:路径参数</p>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }</code></pre>
- <h5>删除应用</h5>
- <p>对于已经废弃的应用,平台可以通过接口删除</p>
- <p>接口地址:/openapi/app</p>
- <p>请求方式:DELETE</p>
- <p>请求参数:路径参数</p>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }</code></pre>
- <h5>重置应用秘钥</h5>
- <p>新创建的应用的秘钥是随机生成的32位数字跟英文大写字母。</p>
- <p>如果用户签名秘钥存在泄露的情况,可以自己重置签名秘钥,平台也可以重置签名秘钥。</p>
- <p>重置的签名秘钥也是随机生成的。</p>
- <p>接口地址:/openapi/app/resetSignKey/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:路径参数</p>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }</code></pre>
- <h5>重置签名密钥</h5>
- <p>应用的签名秘钥用户数据接口的参数加签用的。应用生成的时候,签名秘钥是随机生成的</p>
- <p>应用有效期过了,则该应用不能通过开放接口访问</p>
- <p>接口有效期可以修改比当前有效期以前,也可以修改比当前有效期以后。</p>
- <p>如果有效期修改在当前时间以前,也是运行的,则等于直接失效了。</p>
- <p>接口地址:/openapi/app/expiration/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:JSON格式</p>
- <p>body 体中参数</p>
- <pre><code>{
- "expirationTime": "2021-01-01 00:00:00"
- }</code></pre>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }</code></pre>
- <h5>重置永久token</h5>
- <p>方便用户调试使用,设置了永久token。</p>
- <p>如果用户不需要永久token,可以重置永久token。</p>
- <p>接口地址:/openapi/app/resetToken/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:路径参数</p>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }</code></pre>
- <h5>修改通知回调地址</h5>
- <p>对于一些下行的接口,或者推送的接口,需要应用配置下行的地址。</p>
- <p>回调的地址支持到端口后的特定前缀。例如:http://www.baidu.com/callback, 推送的消息会发送到http://www.baidu.com/callback/push/xxx</p>
- <p>新创建的应用的通知回调地址为空。没有配置的情况下,平台不会推送消息。</p>
- <p>平台对于每个应用只支持推送一个通知回调地址。</p>
- <p>接口地址:/openapi/app/callback/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:JSON格式</p>
- <p>body 体中参数</p>
- <pre><code>{
- "callbackAddress": "2021-01-01 00:00:00"
- }</code></pre>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }</code></pre>
- <h5>查询详情</h5>
- <p>接口地址:/openapi/app/{1}</p>
- <p>请求方式:GET</p>
- <p>请求参数:路径参数</p>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "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禁用
- }
- }</code></pre>
- <h5>查询应用列表(分页)</h5>
- <p>接口地址:/openapi/app/page</p>
- <p>请求方式:GET</p>
- <p>请求参数:分页参数</p>
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>类型</th>
- <th>说明</th>
- <th>是否必填</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>current</td>
- <td>int</td>
- <td>页码</td>
- <td>是</td>
- </tr>
- <tr>
- <td>size</td>
- <td>int</td>
- <td>每页条数</td>
- <td>是</td>
- </tr>
- <tr>
- <td>name</td>
- <td>string</td>
- <td>应用名称</td>
- <td>否</td>
- </tr>
- <tr>
- <td>serviceType</td>
- <td>string</td>
- <td>服务行业</td>
- <td>否</td>
- </tr>
- <tr>
- <td>status</td>
- <td>int</td>
- <td>状态</td>
- <td>否</td>
- </tr>
- <tr>
- <td>phoneNumber</td>
- <td>string</td>
- <td>手机号码</td>
- <td>否</td>
- </tr>
- </tbody>
- </table>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "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禁用
- }
- ]
- }
- }</code></pre>
- <h4>开放平台接口管理</h4>
- <p>开放平台数据接口管理模块负责对接车场、人行项目的接口,包括接口的注册、认证、授权、管理等。我们将配置两类接口,一个是上行接口,一个是下行接口。</p>
- <h5>新增接口</h5>
- <p>开放平台对外提供的接口,包括车场、人行项目的接口。都是在这里添加。需要的参数有,接口名称,路径,请求方式,接口类型,版本,发布状态,接口展示文档,启用状态,访问限制次数。</p>
- <p>具体参数表格如下:</p>
- <table>
- <tr>
- <th>字段名</th>
- <th>参数名称</th>
- <th>类型</th>
- <th>说明</th>
- <th>是否必填</th>
- </tr>
- <tr>
- <td>name</td>
- <td>接口名称</td>
- <td>字符串</td>
- <td>接口名称</td>
- <td>是</td>
- </tr>
- <tr>
- <td>path</td>
- <td>路径</td>
- <td>字符串</td>
- <td>接口路径</td>
- <td>是</td>
- </tr>
- <tr>
- <td>method</td>
- <td>请求方式</td>
- <td>字符串</td>
- <td>请求方式 POST PUT GET DELETE</td>
- <td>是</td>
- </tr>
- <tr>
- <td>type</td>
- <td>接口类型</td>
- <td>int</td>
- <td>接口类型 0 上行 1 下行</td>
- <td>是</td>
- </tr>
- <tr>
- <td>serviceType</td>
- <td>业务类型</td>
- <td>int</td>
- <td>1 车位 2 支付 3 月卡 4 车场 5 优惠券</td>
- <td>是</td>
- </tr>
- <tr>
- <td>version</td>
- <td>版本</td>
- <td>字符串</td>
- <td>版本号 v1 v2 ...</td>
- <td>是</td>
- </tr>
- <tr>
- <td>status</td>
- <td>发布状态</td>
- <td>int</td>
- <td>发布状态 0 未发出 1 已发布</td>
- <td>是</td>
- </tr>
- <tr>
- <td>doc</td>
- <td>接口展示文档</td>
- <td>字符串</td>
- <td>接口展示文档 markdown格式</td>
- <td>否</td>
- </tr>
- <tr>
- <td>enable</td>
- <td>启用状态</td>
- <td>int</td>
- <td>启用状态 0 启用 1 禁用</td>
- <td>是</td>
- </tr>
- <tr>
- <td>limitCount</td>
- <td>访问限制次数</td>
- <td>int</td>
- <td>每秒访问限制次数</td>
- <td>否</td>
- </tr>
- </table>
- <p>接口地址:/openapi/interface/add</p>
- <p>请求方式:POST</p>
- <p>请求参数:JSON格式</p>
- <pre><code>{
- "name": "车场接口",
- "path": "/api/v1/car/parking",
- "method": "GET",
- "type": 0,
- "serviceType": 1,
- "version": "v1",
- "doc": "",
- "limitCount": 100
- }
- </code></pre>
- <p>响应参数:JSON格式</p>
- <pre><code>{
- "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></pre>
- <h5>编辑接口</h5>
- <p>对于已经发布的接口,需要修改接口信息。可以修改的参数有接口名称、路径、请求方式、接口类型、版本、接口展示文档、访问限制次数。参考新增的表格。修改的时候传入参数如果没有修改,则不传。参数为空的时候等于不修改。</p>
- <p>接口地址:/openapi/interface/edit/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:JSON格式</p>
- <pre><code>{
- "name": "车场接口",
- "path": "/api/v1/car/parking",
- "method": "GET",
- "type": 0,
- "serviceType": 1,
- "version": "v1",
- "doc": "",
- "limitCount": 100
- }
- </code></pre>
- <p>响应参数:JSON格式</p>
- <pre><code>{
- "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></pre>
- <h5>删除接口</h5>
- <p>对于已经废弃的接口,需要删除接口。或者批量删除接口。</p>
- <p>接口地址:/openapi/interface</p>
- <p>请求方式:DELETE</p>
- <p>请求参数:ids 多个用逗号隔开</p>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }
- </code></pre>
- <h5>配置接口文档</h5>
- <p>接口中需要配置给开放平台展示的接口文档。需要markdown格式。管理员通过前端页面编辑接口文档。</p>
- <p>接口地址:/openapi/interface/doc/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:JSON格式</p>
- <pre><code>{
- "doc": "接口文档"
- }
- </code></pre>
- <p>响应参数:JSON格式</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }
- </code></pre>
- <h5>发布接口</h5>
- <p>对于已经配置的接口,需要发布接口。</p>
- <p>接口地址:/openapi/interface/publish/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:</p>
- <p>响应参数:JSON格式</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }
- </code></pre>
- <h5>禁用接口</h5>
- <p>对于已经发布的接口,可以通过页面禁用接口。</p>
- <p>接口地址:/openapi/interface/disable/{1}</p>
- <p>请求方式:PUT</p>
- <p>请求参数:</p>
- <p>响应参数:JSON格式</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }
- </code></pre>
- <h5>导入接口</h5>
- <p>可以通过excel导入其他环境已经配置好的接口。</p>
- <p>接口地址:/openapi/interface/import</p>
- <p>请求方式:POST</p>
- <p>请求参数:multipart_file //excel文件</p>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": null
- }
- </code></pre>
- <h5>导出接口</h5>
- <p>可以导出当前环境的接口信息。</p>
- <p>接口地址:/openapi/interface/export</p>
- <p>请求方式:GET</p>
- <p>请求参数: json</p>
- <pre><code>{
- "ids" : "1,2,3" //多个接口id用逗号隔开。 不传则导出全部
- }
- </code></pre>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "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></pre>
- <h5>查询详情</h5>
- <p>接口地址:/openapi/interface/{1}</p>
- <p>请求方式:GET</p>
- <p>请求参数:路径参数</p>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "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></pre>
- <h5>查询接口列表(分页)</h5>
- <p>接口地址:/openapi/interface/page</p>
- <p>请求方式:GET</p>
- <p>请求参数:分页参数</p>
- <table>
- <tr>
- <th>参数名</th>
- <th>类型</th>
- <th>说明</th>
- <th>是否必填</th>
- </tr>
- <tr>
- <td>current</td>
- <td>int</td>
- <td>页码</td>
- <td>是</td>
- </tr>
- <tr>
- <td>size</td>
- <td>int</td>
- <td>每页条数</td>
- <td>是</td>
- </tr>
- <tr>
- <td>name</td>
- <td>string</td>
- <td>应用名称</td>
- <td>否</td>
- </tr>
- <tr>
- <td>serviceType</td>
- <td>string</td>
- <td>服务行业</td>
- <td>否</td>
- </tr>
- <tr>
- <td>status</td>
- <td>int</td>
- <td>状态</td>
- <td>否</td>
- </tr>
- <tr>
- <td>path</td>
- <td>string</td>
- <td>访问路径</td>
- <td>否</td>
- </tr>
- </table>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "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"
- }
- ]
- }
- }
- </code></pre>
- <h4>开放平台安全管理</h4>
- <p>开放平台安全校验模块负责对接车场、人行项目的安全校验,包括接口的安全校验、数据加密、数据权限校验、数据流量监控等。</p>
- <h5>token生成</h5>
- <ul>
- <li>开放平台对外提供的接口,都需要通过token进行访问。</li>
- <li>开放平台用户,需要通过appId, appSecret, timestamp, sign生成token。</li>
- <li>token具有有效期。有效期时长可以配置。默认为两天。</li>
- <li>token是采用jwt生成的。</li>
- <li>接口地址:/openapi/token/generate</li>
- <li>请求方式:POST</li>
- <li>请求参数:JSON格式</li>
- </ul>
- <pre><code>{
- "appId": "123456",
- "appSecret": "123456",
- "timestamp": 1610123456789,
- "sign": "123456"
- }
- </code></pre>
- <p>响应参数:JSON格式</p>
- <p>响应示例:</p>
- <pre><code>{
- "code": 1000000,
- "msg": "操作成功",
- "data": {
- "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNjEwMTIzNDU2LCJleHAiOjE2MTA1MjM0NTYsInVzZXJuYW1lIjoiYWRtaW4iLCJpYXQiOjE2MTA1MjM0NTYsImV4cCI6MTYxMDUyMzQ1NiwiaWF0IjoxNjEwMTIzNDU2LCJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
- }
- }
- </code></pre>
- <h5>token校验</h5>
- <ul>
- <li>开放平台对外提供的接口,都需要通过token进行访问。</li>
- <li>开放平台用户,需要通过token校验。</li>
- <li>通过jwt解析token。对比jwt中的body数据是否正确。并获取当前应用的一些权限。</li>
- </ul>
- <h5>签名方式</h5>
- <ul>
- <li>所有的接口按照接口都需要参数签名。</li>
- <li>对所有的加密字段,通过ascii排序后,拼接成字符串,然后用appSecret进行aes加密。</li>
- <li>对于post, put请求,加密参数会在body中。</li>
- <li>对于get, delete请求,加密参数会在url中。</li>
- </ul>
- <h5>签名校验</h5>
- <ul>
- <li>所有的接口都需要校验签名。</li>
- <li>对所有的加密字段,通过ascii排序后,拼接成字符串,然后用appSecret进行aes加密。</li>
- <li>对比签名是否正确。</li>
- </ul>
- <h5>接口权限校验</h5>
- <ul>
- <li>开放平台对外提供的接口,都需要进行权限校验。</li>
- <li>查看当前应用的接口绑定关系。</li>
- <li>根据当前应用的权限,判断当前接口是否有权限访问。</li>
- </ul>
- <h5>接口流量监控</h5>
- <ul>
- <li>开放平台对外提供的接口,都需要进行流量监控。</li>
- <li>每个接口都需要记录访问次数。按照秒,分,时,天,月,年进行统计。目前只统计当前值。就是当前秒,当前分,过时的就丢弃。</li>
- <li>对于接口都存在一个访问限制数。</li>
- <li>限制数目前设置的是当前秒的限制数。</li>
- <li>限制数达到后,接口会被禁用。</li>
- </ul>
- <h3>数据库设计</h3>
- <h4>应用管理表</h4>
- <table>
- <thead>
- <tr>
- <th>字段名</th>
- <th>参数名称</th>
- <th>类型</th>
- <th>能否为空</th>
- <th>说明</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>id</td>
- <td>主键</td>
- <td>int</td>
- <td>否</td>
- <td>应用id</td>
- </tr>
- <tr>
- <td>name</td>
- <td>应用名称</td>
- <td>varchar(16)</td>
- <td>否</td>
- <td>应用名称</td>
- </tr>
- <tr>
- <td>app_id</td>
- <td>应用id</td>
- <td>varchar(32)</td>
- <td>否</td>
- <td>应用id</td>
- </tr>
- <tr>
- <td>app_secret</td>
- <td>应用密钥</td>
- <td>varchar(32)</td>
- <td>否</td>
- <td>应用密钥</td>
- </tr>
- <tr>
- <td>status</td>
- <td>应用状态</td>
- <td>int</td>
- <td>否</td>
- <td>应用状态 0 禁用 1 启用</td>
- </tr>
- <tr>
- <td>create_time</td>
- <td>创建时间</td>
- <td>datetime</td>
- <td>否</td>
- <td>创建时间</td>
- </tr>
- <tr>
- <td>update_time</td>
- <td>更新时间</td>
- <td>datetime</td>
- <td>是</td>
- <td>更新时间</td>
- </tr>
- <tr>
- <td>create_user</td>
- <td>创建人</td>
- <td>varchar(16)</td>
- <td>否</td>
- <td>创建人</td>
- </tr>
- <tr>
- <td>update_user</td>
- <td>更新人</td>
- <td>varchar(16)</td>
- <td>是</td>
- <td>更新人</td>
- </tr>
- <tr>
- <td>expiration_time</td>
- <td>过期时间</td>
- <td>datetime</td>
- <td>否</td>
- <td>过期时间</td>
- </tr>
- <tr>
- <td>is_delete</td>
- <td>是否已删除</td>
- <td>int</td>
- <td>否</td>
- <td>0 正常 1 已删除</td>
- </tr>
- <tr>
- <td>remark</td>
- <td>备注</td>
- <td>varchar(255)</td>
- <td>是</td>
- <td>备注</td>
- </tr>
- </tbody>
- </table>
- <h4>应用项目关联表</h4>
- <table>
- <thead>
- <tr>
- <th>字段名</th>
- <th>参数名称</th>
- <th>类型</th>
- <th>能否为空</th>
- <th>说明</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>id</td>
- <td>主键</td>
- <td>int</td>
- <td>否</td>
- <td>主键</td>
- </tr>
- <tr>
- <td>app_id</td>
- <td>应用id</td>
- <td>varchar(32)</td>
- <td>否</td>
- <td>应用id 应用表的主键</td>
- </tr>
- <tr>
- <td>project_id</td>
- <td>项目id</td>
- <td>int</td>
- <td>否</td>
- <td>项目id 对应项目表的主键</td>
- </tr>
- </tbody>
- </table>
- <h4>接口管理表</h4>
- <table>
- <thead>
- <tr>
- <th>字段名</th>
- <th>参数名称</th>
- <th>类型</th>
- <th>能否为空</th>
- <th>说明</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>id</td>
- <td>主键</td>
- <td>int</td>
- <td>否</td>
- <td>接口id</td>
- </tr>
- <tr>
- <td>name</td>
- <td>接口名称</td>
- <td>varchar(16)</td>
- <td>否</td>
- <td>接口名称</td>
- </tr>
- <tr>
- <td>path</td>
- <td>接口路径</td>
- <td>varchar(128)</td>
- <td>否</td>
- <td>接口路径</td>
- </tr>
- <tr>
- <td>method</td>
- <td>请求方式</td>
- <td>varchar(16)</td>
- <td>否</td>
- <td>请求方式</td>
- </tr>
- <tr>
- <td>type</td>
- <td>接口类型</td>
- <td>int</td>
- <td>否</td>
- <td>接口类型 0 上行 1下行</td>
- </tr>
- <tr>
- <td>service_type</td>
- <td>服务类型</td>
- <td>int</td>
- <td>否</td>
- <td>1 车位 2 支付 3 月卡 4 车场 5 优惠券</td>
- </tr>
- <tr>
- <td>version</td>
- <td>版本号</td>
- <td>varchar(16)</td>
- <td>否</td>
- <td>版本号 v1 v2</td>
- </tr>
- <tr>
- <td>doc</td>
- <td>接口文档</td>
- <td>text</td>
- <td>是</td>
- <td>接口文档</td>
- </tr>
- <tr>
- <td>status</td>
- <td>接口状态</td>
- <td>int</td>
- <td>否</td>
- <td>接口状态 0 禁用 1 启用</td>
- </tr>
- <tr>
- <td>enable</td>
- <td>是否启用</td>
- <td>int</td>
- <td>否</td>
- <td>是否启用 0 禁用 1 启用</td>
- </tr>
- <tr>
- <td>limit_count</td>
- <td>限制次数</td>
- <td>int</td>
- <td>否</td>
- <td>限制次数</td>
- </tr>
- <tr>
- <td>create_time</td>
- <td>创建时间</td>
- <td>datetime</td>
- <td>否</td>
- <td>创建时间</td>
- </tr>
- <tr>
- <td>update_time</td>
- <td>更新时间</td>
- <td>datetime</td>
- <td>是</td>
- <td>更新时间</td>
- </tr>
- <tr>
- <td>create_user</td>
- <td>创建人</td>
- <td>varchar(16)</td>
- <td>否</td>
- <td>创建人</td>
- </tr>
- <tr>
- <td>update_user</td>
- <td>更新人</td>
- <td>varchar(16)</td>
- <td>是</td>
- <td>更新人</td>
- </tr>
- <tr>
- <td>is_delete</td>
- <td>是否已删除</td>
- <td>int</td>
- <td>否</td>
- <td>0 正常 1 已删除</td>
- </tr>
- <tr>
- <td>remark</td>
- <td>备注</td>
- <td>varchar(255)</td>
- <td>是</td>
- <td>备注</td>
- </tr>
- </tbody>
- </table>
- <h4>应用接口授权关联表</h4>
- <table>
- <thead>
- <tr>
- <th>字段名</th>
- <th>参数名称</th>
- <th>类型</th>
- <th>能否为空</th>
- <th>说明</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>id</td>
- <td>主键</td>
- <td>int</td>
- <td>否</td>
- <td>主键</td>
- </tr>
- <tr>
- <td>app_id</td>
- <td>应用id</td>
- <td>varchar(32)</td>
- <td>否</td>
- <td>应用id 应用表的主键</td>
- </tr>
- <tr>
- <td>interface_id</td>
- <td>接口id</td>
- <td>int</td>
- <td>否</td>
- <td>接口id 接口表的主键</td>
- </tr>
- </tbody>
- </table>
- <h4>安全管理redis数据结构设计</h4>
- </body>
- </html>
|