12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655 |
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
- <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />
- <meta name="renderer" content="webkit">
- <meta http-equiv="Expires" content="0">
- <meta http-equiv="Pragma" content="no-cache">
- <meta http-equiv="Cache-control" content="no-cache">
- <meta http-equiv="Cache" content="no-cache">
- <title>Apipost接口文档</title>
- <link href="https://img.cdn.apipost.cn/docs/css7/style.css?20220909" rel="stylesheet">
- <link href="https://img.cdn.apipost.cn/docs/css/font-awesome-4.7.0/css/font-awesome.min.css?20220909" rel="stylesheet">
- <link href="https://img.cdn.apipost.cn/docs/css7/github.css?20220909" rel="stylesheet">
- <link rel="stylesheet" href="https://img.cdn.apipost.cn/docs/css7/content-v7.css?20220909">
- <link href="https://img.cdn.apipost.cn/docs/css7/json-viewer.css?20220909" rel="stylesheet">
- <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/jquery-3.4.1.min.js?20220909"></script>
- <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js7/marked.min.js?20220909"></script>
- <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js7/template-web.js?20220909"></script>
- <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js7/highlight.js?20220909"></script>
- <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js7/clipboard.min.js?20220909"></script>
- <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js7/crypto-js.min.js?20220909" charset="utf-8"></script>
- <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/json5.min.js?20220909"></script>
- <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/dayjs.min.js?20220909"></script>
- <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/url-join.js?20220909"></script>
- <!-- <script type="text/javascript" src="./js/enc.min.js"></script> -->
- <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/json-viewer.min.js?20220909"></script>
- <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/lodash.min.js?20220909"></script>
- <script type="text/javascript">
- consoleLog = console.log; // 重写 consoleLog
- $(function () {
- })
- </script>
- </head>
- <body>
- <div class="apipost-doc-body">
- <div class="apipost-doc-body-main">
- <div class="apipost-doc-body-nav">
- <div class="logo">
- <a href="https://www.apipost.cn/"><img class="project-logo" src="https://img.cdn.apipost.cn/docs/images7/logo.svg" /></a>
- </div>
- <div class="apipost-doc-body-nav-search">
- <img src="https://img.cdn.apipost.cn/docs/images7/search-icon.svg">
- <input type="text" name="search-input" placeholder="搜索目录、接口。支持 名称、URL、Method 搜索">
- </div>
- <div class="apipost-doc-body-nav-title"> 项目名 </div>
- <div class="apipost-doc-body-nav-list">
- <ul>
- <li data-type="global" data-parent_id="0" data-target_id="001" data-indent="0"
- class="global active">
- <a class="load-data-btn" href="javascript:;" data-type="global" data-parent_id="0"
- data-target_id="001" data-indent="0">全局公共参数</a>
- </li>
- </ul>
- <ul class="apipost-left-nav-template">
- <script type="text/html" id="apipost-left-nav-template-tpl">
- {{if _.isArray(list)}}
- {{each list item}}
- {{if !item.indent}}
- {{set indent = item.indent = 0}}
- {{/if}}
- <li data-type="{{item.target_type}}" data-parent_id="{{item.parent_id}}" data-target_id="{{item.target_id}}" data-indent="{{item.indent}}" class="{{item.target_type}} {{if target_id == item.target_id}}active{{/if}} {{if item.indent != 0}}is-hidden{{/if}}" style="padding-left: {{item.indent?item.indent:0}}em;">
- {{if item.target_type == 'folder' || item.example_type == 'folder'}}
- <a class="load-data-btn" href="javascript:;" data-type="{{item.target_type}}" data-parent_id="{{item.parent_id}}" data-target_id="{{item.local_target_id}}" data-indent="{{item.indent}}"><i class="fa fa-caret-down"></i>{{item.name}}</a>
- {{else if item.target_type == 'websocket' || item.example_type == 'websocket'}}
- <a class="load-data-btn" href="javascript:;" data-type="{{item.target_type}}" data-parent_id="{{item.parent_id}}" data-target_id="{{item.local_target_id}}" data-indent="{{item.indent}}"><em class="method websocket">WS</em><span>{{item.name}}</span></a>
- {{else if item.target_type == 'doc' || item.example_type == 'doc'}}
- <a class="load-data-btn" href="javascript:;" data-type="{{item.target_type}}" data-parent_id="{{item.parent_id}}" data-target_id="{{item.local_target_id}}" data-indent="{{item.indent}}"><em class="method doc">文本</em><span>{{item.name}}</span></a>
- {{else if item.target_type == 'grpc' || item.example_type == 'grpc'}}
- <a class="load-data-btn" href="javascript:;" data-type="{{item.target_type}}" data-parent_id="{{item.parent_id}}" data-target_id="{{item.local_target_id}}" data-indent="{{item.indent}}"><em class="method grpc">GRPC</em><span>{{item.name}}</span></a>
- {{else}}
- <a class="load-data-btn" href="javascript:;" data-type="{{item.target_type}}" data-parent_id="{{item.parent_id}}" data-target_id="{{item.local_target_id}}" data-indent="{{item.indent}}"><em class="method {{item.method}}">{{item.method}}</em><span>{{item.name}}</span></a>
- {{/if}}
- {{if item.target_type != 'folder' && item.color}}
- <span style="margin-left:5px;display:inline-block;width:6px;height:6px;border-radius:50%;background-color: {{item.color}};"></span>
- {{/if}}
- {{if item.target_type == 'example'}}
- <svg style="margin-left:5px;" width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
- <path d="M4.91033 6.68207H3.30033C3.09013 6.68207 2.94513 6.4768 3.01993 6.28529L4.61973 2.18849C4.64137 2.13306 4.67976 2.08536 4.72982 2.0517C4.77987 2.01804 4.83923 2.00001 4.90003 2H7.59962C7.81262 2 7.95782 2.21054 7.87742 2.40303L6.94592 4.63367H8.69951C8.95741 4.63367 9.09501 4.93026 8.92491 5.11933L4.62553 9.89887C4.41653 10.1313 4.02903 9.92989 4.11013 9.63106L4.91033 6.68207Z" fill="#FFC01E"/>
- </svg>
- {{/if}}
- </li>
- {{if _.isArray(item.children)}}
- {{each item.children as childrenItem key}}
- {{if item.children[key].indent}}
- {{set indent = item.children[key].indent = item.children[key].indent+2}}
- {{else}}
- {{set indent = item.children[key].indent = item.indent + 2}}
- {{/if}}
- {{/each}}
- {{set _recursiveList ={list:item.children}; }}
- {{include 'apipost-left-nav-template-tpl' _recursiveList}}
- {{/if}}
- {{/each}}
- {{/if}}
- </script>
- </ul>
- </div>
- <div class="apipost-doc-body-nav-drag-bar"></div>
- </div>
- <div class="apipost-doc-body-content">
- <div class="apipost-doc-wrap">
- <script type="text/html" id="apipost-doc-wrap-tpl">
- <div class="apipost-doc-wrap-title">
- <h2 class="title" data-text="{{data.name}}" id="{{data.name}}">
- <div class="mobile-nav-toggle-btn">
- <a href="javascript:;" class="mobile-nav-toggle-link-btn"><i class="fa fa-reorder"></i></a>
- </div>
- <div class="title-text">{{data.name}}</div>
- {{if data.target_type == 'api' || data.example_type == 'api'}}
- <button type="button" class="copy-clipboard" data-clipboard-text="{{JSON.stringify(data.copyData)}}"><i class="fa fa-copy"></i> 复制接口 </button>
- {{/if}}
- {{if data.target_type == 'api' || data.target_type == 'grpc' || data.target_type == 'websocket' || data.example_type == 'api' || data.example_type == 'grpc' || data.example_type == 'websocket'}}
- <a type="button" class="copy-clipboard" data-clipboard-text="{{JSON.stringify(data)}}" href="https://v7.apipost.cn/#/apis/run?target_id={{data.target_id}}" target="_blank">去调试</a>
- {{/if}}
- </h2>
- </div>
- <div class="apipost-doc-wrap-desc">
- <!-- 创建人:哈利厄 最后更新:哈利厄 -->
- 创建时间:{{data.format_create_dtime}} 更新时间:{{data.format_update_dtime}}
- </div>
- {{if _.has(data, 'request.description')}}
- <div class="apipost-doc-wrap-para-markdown">
- <div class="markdown-section">{{@marked(data.request.description)}}</div>
- </div>
- {{/if}}
- {{if data.target_type == 'grpc' || data.example_type == 'grpc'}}
- <h3 class="apipost-doc-wrap-para-title" data-text="基本信息" id="基本信息">
- <i class="fa fa-wpforms"></i>
- <span>基本信息</span>
- </h3>
- <ul class="apipost-doc-wrap-base-para">
- {{if _.has(data, 'formatMark') && _.isObject(data.formatMark)}}
- <li><span>接口状态: </span><span style="color: {{data.formatMark.color}};">{{data.formatMark.name}}</span> </li>
- {{/if}}
- </ul>
- {{if _.has(data, 'protos') && _.isObject(data.protos) && Object.values(data.protos).length > 0}}
- <h3 class="apipost-doc-wrap-para-title" data-text="方法列表" id="方法列表">
- <i class="fa fa-wpforms"></i>
- <span>方法列表</span>
- </h3>
- {{each data.protos item key}}
- {{if _.has(item, 'services') && _.isObject(item.services) && !_.isEmpty(item.services)}}
- <h4 class="apipost-doc-wrap-para-title" data-text="{{key}}" id="{{key}}">
- <span>{{key}}</span>
- </h4>
- <div class="apipost-doc-paras" for-id="{{key}}">
- {{each item.services service namespace}}
- {{if _.isObject(service)}}
- {{each service method methodName}}
- <h5 data-text="{{namespace}}/{{methodName}}" id="{{namespace}}/{{methodName}}"><a name="{{key}}/{{namespace}}/{{methodName}}">[method]</a> {{key}}/{{namespace}}/{{methodName}}</h5>
- <ul class="apipost-doc-wrap-base-para">
- <li><span>方法名: </span><span><i class="copy-clipboard" data-clipboard-text="{{methodName}}">{{methodName}}</i></span> </li>
- <li><span>服务地址: </span><span><i class="copy-clipboard" data-clipboard-text="{{method.url}}">{{method.url}}</i></span> </li>
- </ul>
- {{if _.has(method, 'request.body.raw') && method.request.body.raw != ''}}
- <h6 data-text="请求参数" id="请求参数">请求参数</h6>
- <div class="apipost-raw-json request-body-json-view">
- <button type="button" class="copy-clipboard" data-clipboard-text="{{method.request.body.raw}}"><i class="fa fa-clipboard"></i>复制</button>
- <input type="hidden" id="request-body-raw-editor-input-{{methodName}}" value='{{method.request.body.raw}}'>
- <pre class="request-body-raw-editor-json" id="request-body-raw-editor-json-{{methodName}}"><code class="json">{{method.request.body.raw}}</code></pre>
- </div>
- {{if _.has(method, 'request.body.parameter') && _.isArray(method.request.body.parameter) && method.request.body.parameter.length > 0}}
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>是否必填</th>
- <th>参数类型</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each method.request.body.parameter item}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td style="position: relative;">
- {{if item.value_var}}
- {{item.value_var}}
- <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
- <div class="vars_title">
- 变量{{item.value}} 生成
- </div>
- {{else}}
- <pre>{{item.value}}</pre>
- {{/if}}
- </td>
- <td>{{(item.not_null >0) ? '是' : '否'}}</td>
- <td>{{item.field_type}}</td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{/if}}
- {{if _.has(method, 'response') && _.isObject(method.response) && !_.isEmpty(method.response)}}
- {{each method.response response name}}
- {{if response.raw != ''}}
- <h6 data-text="{{name == 'success' ? '成功响应示例':'错误响应示例'}}" id="{{name == 'success' ? '成功响应示例':'错误响应示例'}}">{{name == 'success' ? '成功响应示例':'错误响应示例'}}</h6>
- <div class="apipost-raw-json response-body-json-view">
- <button type="button" class="copy-clipboard" data-clipboard-text="{{response.raw}}"><i class="fa fa-clipboard"></i>复制</button>
- <input type="hidden" id="response-body-raw-editor-input-{{name}}" value='{{response.raw}}'>
- <pre class="request-body-raw-editor-json" id="response-body-raw-editor-json-{{name}}"><code class="json">{{response.raw}}</code></pre>
- </div>
- {{if _.has(response, 'parameter') && _.isArray(response.parameter) && response.parameter.length > 0}}
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>是否必填</th>
- <th>参数类型</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each response.parameter item}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td>
- <pre>{{item.value}}</pre>
- </td>
- <td>{{(item.not_null >0) ? '是' : '否'}}</td>
- <td>{{item.field_type}}</td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{/if}}
- {{/each}}
- {{/if}}
- <hr>
- {{/each}}
- {{/if}}
- {{/each}}
- </div>
- {{/if}}
- {{/each}}
- {{/if}}
- {{/if}}
- {{if data.target_type == 'folder'}}
- <h3 class="apipost-doc-wrap-para-title" data-text="目录参数" id="目录参数">
- <i class="fa fa-wpforms"></i>
- <span>目录参数</span>
- </h3>
- <div class="apipost-doc-paras" for-id="目录参数">
- {{if _.has(data, 'request.header') && _.isArray(data.request.header) && data.request.header.length > 0}}
- <h4 data-text="Header 请求参数" id="Header 请求参数">Header 请求参数</h4>
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>是否必填</th>
- <th>参数类型</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each data.request.header item}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td style="position: relative;">
- {{if item.value_var}}
- {{item.value_var}}
- <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
- <div class="vars_title">
- 变量{{item.value}} 生成
- </div>
- {{else}}
- <pre>{{item.value}}</pre>
- {{/if}}
- </td>
- <td>{{(item.not_null >0) ? '是' : '否'}}</td>
- <td>{{item.field_type}}</td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{if _.has(data, 'request.query') && _.isArray(data.request.query) && data.request.query.length > 0}}
- <h4 data-text="Query 请求参数" id="Query 请求参数">Query 请求参数</h4>
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>是否必填</th>
- <th>参数类型</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each data.request.query item}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td style="position: relative;">
- {{if item.value_var}}
- {{item.value_var}}
- <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
- <div class="vars_title">
- 变量{{item.value}} 生成
- </div>
- {{else}}
- <pre>{{item.value}}</pre>
- {{/if}}
- </td>
- <td>{{(item.not_null >0) ? '是' : '否'}}</td>
- <td>{{item.field_type}}</td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{if _.has(data, 'request.body') && _.isArray(data.request.body) && data.request.body.length > 0}}
- <h4 data-text="Body 请求参数" id="Body 请求参数">Body 请求参数</h4>
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>是否必填</th>
- <th>参数类型</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each data.request.body item}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td style="position: relative;">
- {{if item.value_var}}
- {{item.value_var}}
- <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
- <div class="vars_title">
- 变量{{item.value}} 生成
- </div>
- {{else}}
- <pre>{{item.type == 'File' ? '[文件路径]':item.value}}</pre>
- {{/if}}
- </td>
- <td>{{(item.not_null >0) ? '是' : '否'}}</td>
- <td>{{item.type == 'File' ? '[文件类型]':item.field_type}}</td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{if _.has(data, 'request.authType')}}
- <h4 data-text="认证方式" id="认证方式">认证方式</h4>
- <ul class="apipost-doc-wrap-base-para">
- <li>{{data.request.authType}}</li>
- </ul>
- {{/if}}
- </div>
- {{/if}}
- {{if data.target_type == 'global'}}
- <div class="apipost-global-tips">
- 说明:全局公共参数是针对项目而言的,所有请求的 HTTP 类型的接口都需要携带此参数。
- </div>
- <h3 data-text="全局公共参数" id="全局公共参数" class="apipost-doc-wrap-para-title">
- <i class="fa fa-wpforms"></i>
- <span>全局公共参数</span>
- </h3>
- <div class="apipost-doc-paras" for-id="全局公共参数">
- {{if _.has(data, 'request.header') && _.isArray(data.request.header) && data.request.header.length > 0}}
- <h4 data-text="Header 请求参数" id="Header 请求参数" >Header 请求参数</h4>
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each data.request.header item}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td style="position: relative;">
- {{if item.value_var}}
- {{item.value_var}}
- <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
- <div class="vars_title">
- 变量{{item.value}} 生成
- </div>
- {{else}}
- <pre>{{item.value}}</pre>
- {{/if}}
- </td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{if _.has(data, 'request.query') && _.isArray(data.request.query) && data.request.query.length > 0}}
- <h4 data-text="Query 请求参数" id="Query 请求参数">Query 请求参数</h4>
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each data.request.query item}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td style="position: relative;">
- {{if item.value_var}}
- {{item.value_var}}
- <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
- <div class="vars_title">
- 变量{{item.value}} 生成
- </div>
- {{else}}
- <pre>{{item.value}}</pre>
- {{/if}}
- </td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{if _.has(data, 'request.body') && _.isArray(data.request.body) && data.request.body.length > 0}}
- <h4 data-text="Body 请求参数" id="Body 请求参数">Body 请求参数</h4>
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each data.request.body item}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td style="position: relative;">
- {{if item.value_var}}
- {{item.value_var}}
- <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
- <div class="vars_title">
- 变量{{item.value}} 生成
- </div>
- {{else}}
- <pre>{{item.type == 'File' ? '[文件路径]':item.value}}</pre>
- {{/if}}
- </td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{if _.has(data, 'script.auth.type')}}
- <h4 data-text="认证方式" id="认证方式">认证方式</h4>
- <ul class="apipost-doc-wrap-base-para">
- <li>{{data.script.auth.type}}</li>
- </ul>
- {{/if}}
- </div>
- {{/if}}
- {{if data.target_type == 'websocket' || data.example_type == 'websocket'}}
- <h3 data-text="基本信息" id="基本信息" class="apipost-doc-wrap-para-title">
- <i class="fa fa-wpforms"></i>
- <span>基本信息</span>
- </h3>
- <ul class="apipost-doc-wrap-base-para">
- {{if _.has(data, 'formatMark') && _.isObject(data.formatMark)}}
- <li><span>接口状态: </span><span style="color: {{data.formatMark.color}};">{{data.formatMark.name}}</span> </li>
- {{/if}}
- <li><span>接口URL: </span><span><em class="method {{data.method}}">{{data.method}}</em>
- <i class="copy-clipboard" data-clipboard-text="{{data.url}}">{{data.url}}</i></span> </li>
- </ul>
- {{/if}}
- {{if data.target_type == 'api' || data.example_type == 'api'}}
- <h3 data-text="基本信息" id="基本信息" class="apipost-doc-wrap-para-title">
- <i class="fa fa-wpforms"></i>
- <span>基本信息</span>
- </h3>
- <ul class="apipost-doc-wrap-base-para">
- {{if _.has(data, 'formatMark') && _.isObject(data.formatMark)}}
- <li><span>接口状态: </span><span style="color: {{data.formatMark.color}};">{{data.formatMark.name}}</span> </li>
- {{/if}}
- <li><span>接口URL: </span><span><em class="method {{data.method}}">{{data.method}}</em>
- <i class="copy-clipboard" data-clipboard-text="{{data.url}}">{{data.url}}</i></span> </li>
- {{if data.mock_url != ''}}
- <li><span>本地 Mock: </span><span><i class="copy-clipboard" data-clipboard-text="{{urlJoin('http://127.0.0.1:10393/mock/',data.project_id, data.mock_url,'?apipost_id='+data.target_id.toString().substr(0,6))}}">{{urlJoin('http://127.0.0.1:10393/mock/',data.project_id, data.mock_url,'?apipost_id='+data.target_id.toString().substr(0,6))}}</i><br><a href="https://www.apipost.cn/download.html" target="_blank">需安装 Apipost v7 客户端</a> </span> </li>
- {{if data.enable_server_mock > 0}}
- <li><span>云端 Mock: </span><span><i class="copy-clipboard" data-clipboard-text="{{urlJoin('https://console-mock.apipost.cn/mock/',data.project_id, data.mock_url,'?apipost_id='+data.target_id.toString().substr(0,6))}}">{{urlJoin('https://console-mock.apipost.cn/mock/',data.project_id, data.mock_url,'?apipost_id='+data.target_id.toString().substr(0,6))}}</i></span> </li>
- {{/if}}
- {{/if}}
- {{if _.has(data, 'request.body.formatMode')}}
- <li><span>Content-Type:</span><span><i class="copy-clipboard" data-clipboard-text="{{data.request.body.formatMode}}">{{data.request.body.formatMode}}</i></span></li>
- {{/if}}
- {{if _.has(data, 'request.authType')}}
- <li><span>认证方式:</span><span><i class="copy-clipboard" data-clipboard-text="{{data.request.authType}}">{{data.request.authType}}</i></span></li>
- {{/if}}
- </ul>
- <h3 data-text="请求参数" id="请求参数" class="apipost-doc-wrap-para-title">
- <i class="fa fa-wpforms"></i>
- <span>请求参数</span>
- </h3>
- <div class="apipost-doc-paras" for-id="请求参数">
- {{if _.has(data, 'request.header.parameter') && _.isArray(data.request.header.parameter) && data.request.header.parameter.length > 0}}
- <h4 data-text="Header 请求参数" id="Header 请求参数" >Header 请求参数</h4>
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>是否必填</th>
- <th>参数类型</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each data.request.header.parameter item}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td style="position: relative;">
- {{if item.value_var}}
- {{item.value_var}}
- <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
- <div class="vars_title">
- 变量{{item.value}} 生成
- </div>
- {{else}}
- <pre>{{item.value}}</pre>
- {{/if}}
- </td>
- <td>{{(item.not_null >0) ? '是' : '否'}}</td>
- <td>{{item.field_type}}</td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{if _.has(data, 'request.query.parameter') && _.isArray(data.request.query.parameter) && data.request.query.parameter.length > 0}}
- <h4 data-text="Query 请求参数" id="Query 请求参数" >Query 请求参数</h4>
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>是否必填</th>
- <th>参数类型</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each data.request.query.parameter item}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td style="position: relative;">
- {{if item.value_var}}
- {{item.value_var}}
- <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
- <div class="vars_title">
- 变量{{item.value}} 生成
- </div>
- {{else}}
- <pre>{{item.type == 'File' ? '[文件路径]':item.value}}</pre>
- {{/if}}
- </td>
- <td>{{(item.not_null >0) ? '是' : '否'}}</td>
- <td>{{item.field_type}}</td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{if _.has(data, 'request.resful.parameter') && _.isArray(data.request.resful.parameter) && data.request.resful.parameter.length > 0}}
- <h4 data-text="路径参数及说明" id="路径参数及说明" >路径参数及说明</h4>
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each data.request.resful.parameter item}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td style="position: relative;">
- {{if item.value_var}}
- {{item.value_var}}
- <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
- <div class="vars_title">
- 变量{{item.value}} 生成
- </div>
- {{else}}
- <pre>{{item.type == 'File' ? '[文件路径]':item.value}}</pre>
- {{/if}}
- </td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{if _.has(data, 'request.body.mode') && data.request.body.mode != 'none'}}
- <h4 data-text="Body 请求参数" id="Body 请求参数" >Body 请求参数</h4>
- {{if data.request.body.mode == 'form-data' || data.request.body.mode == 'urlencoded'}}
- {{if _.has(data, 'request.body.parameter') && _.isArray(data.request.body.parameter) && data.request.body.parameter.length > 0}}
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>是否必填</th>
- <th>参数类型</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each data.request.body.parameter item}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td style="position: relative;">
- {{if item.value_var}}
- {{item.value_var}}
- <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
- <div class="vars_title">
- 变量{{item.value}} 生成
- </div>
- {{else}}
- <pre>{{item.type == 'File' ? '[文件路径]':item.value}}</pre>
- {{/if}}
- </td>
- <td>{{(item.not_null >0) ? '是' : '否'}}</td>
- <td>{{item.type == 'File' ? '[文件类型]':item.field_type}}</td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{else}}
- {{if data.request.body.raw != ''}}
- <div class="apipost-raw-json request-body-json-view">
- <button type="button" class="copy-clipboard" data-clipboard-text="{{data.request.body.raw}}"><i class="fa fa-clipboard"></i>复制</button>
- <input type="hidden" id="request-body-raw-editor-input" value='{{data.request.body.raw}}'>
- <pre id="request-body-raw-editor-json"><code class="json">{{data.request.body.raw}}</code></pre>
- </div>
- {{if _.has(data, 'request.body.raw_para') && _.isArray(data.request.body.raw_para) && data.request.body.raw_para.length > 0}}
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <th>是否必填</th>
- <th>参数类型</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each data.request.body.raw_para item}}
- {{if item.key != ''}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td style="position: relative;">
- {{if item.value_var}}
- {{item.value_var}}
- <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
- <div class="vars_title">
- 变量{{item.value}} 生成
- </div>
- {{else}}
- <pre>{{item.value}}</pre>
- {{/if}}
- </td>
- <td>{{(item.not_null >0) ? '是' : '否'}}</td>
- <td>{{item.field_type}}</td>
- <td>
- <pre>{{item.description}}</pre>
- </td>
- </tr>
- {{/if}}
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{/if}}
- {{/if}}
- {{/if}}
- </div>
- {{if _.has(data, 'response') && _.isObject(data.response) && Object.values(data.response).length > 0}}
- <h3 data-text="响应示例" id="响应示例" class="apipost-doc-wrap-para-title">
- <i class="fa fa-wpforms"></i>
- <span>响应示例</span>
- </h3>
- <div class="apipost-doc-paras" for-id="响应示例">
- {{each data.response item key}}
- {{if _.has(item, 'expect.name') && item.raw != ''}}
- <h4 data-text="{{item.expect.name}}({{item.expect.code}})" id="{{item.expect.name}}({{item.expect.code}})">{{item.expect.name}}({{item.expect.code}})</h4>
- <div data-type="{{key}}" class="apipost-raw-json response-raw-json-view">
- <button type="button" class="copy-clipboard" data-clipboard-text="{{item.raw}}"><i class="fa fa-clipboard"></i>复制</button>
- <input type="hidden" id="response-raw-{{key}}-json-input" value='{{item.raw}}'>
- <pre id="response-raw-{{key}}-json"><code class="json">{{item.raw}}</code></pre>
- </div>
- {{if _.has(item, 'parameter') && _.isArray(item.parameter) && item.parameter.length > 0}}
- <table>
- <thead>
- <tr>
- <th>参数名</th>
- <th>参数值</th>
- <!-- <th>是否必填</th> -->
- <th>参数类型</th>
- <th>描述说明</th>
- </tr>
- </thead>
- <tbody>
- {{each item.parameter item}}
- {{if item.key != ''}}
- <tr>
- <td><i class="copy-clipboard" data-clipboard-text="{{item.key}}">{{item.key}}</i></td>
- <td>
- <pre>{{item.value}}</pre>
- </td>
- <!-- <td>{{(item.not_null >0) ? '是' : '否'}}</td> -->
- <td>{{item.field_type}}</td>
- <td>
- <pre>{{@replaceOperatorSymbol(item.description)}}</pre>
- </td>
- </tr>
- {{/if}}
- {{/each}}
- </tbody>
- </table>
- {{/if}}
- {{/if}}
- {{/each}}
- </div>
- {{/if}}
- {{/if}}
- <footer> 本文档由 <a href="https://www.apipost.cn/" target="_blank">Apipost 接口管理工具 (https://www.apipost.cn)</a>
- 生成 </footer>
- </script>
- </div>
- <div class="apipost-float-navs">
- <h2>内容导航</h2>
- <ul class="apipost-float-nav-template">
- <script type="text/html" id="apipost-float-nav-template-tpl">
- {{if list.length > 0}}
- {{each list item i}}
- <li style="text-indent: {{item.indent*16}}px;" {{if i == 0}}class="active"{{/if}} data-id="{{item.id}}"><a href="#{{item.id}}">{{item.text}}</a></li>
- {{/each}}
- {{else}}
- <li style="text-align: center;justify-content: center;">暂无导航数据</li>
- {{/if}}
- </script>
- </ul>
- </div>
- </div>
- </div>
- </div>
- <script type="text/javascript">
- // 给 arttemplate 注入新函数
- template.defaults.imports.JSON = JSON;
- template.defaults.imports.urlJoin = urlJoin;
- template.defaults.imports._ = _;
- template.defaults.imports.marked = function (md) {
- marked.setOptions({
- renderer: new marked.Renderer(),
- highlight(code) {
- return hljs.highlight('javascript', code).value;
- },
- breaks: true,
- sanitize: true,
- });
- return marked.parse(md).replace(/<pre>/g, "<pre class='hljs javascript'>");
- };
- template.defaults.imports.Object = Object;
- template.defaults.imports.keyFormat = function (params) {
- const arr = params.split('.');
- let str = '';
- for (let i = 0; i < arr.length - 1; i++) {
- str += `<span style="color:#999">${arr[i]}.</span>`;
- }
- str += arr[arr.length - 1];
- return str;
- };
- template.defaults.imports.replaceOperatorSymbol = function (originString) {
- if (!originString || originString=='') {
- return '';
- }
- const result = originString.replace(/&([^&;]+);/g, function (matchStr, b) {
- const entity = {
- quot: '"',
- lt: '<',
- gt: '>',
- apos: "'",
- amp: '&',
- ldquo: '“',
- rdquo: '”',
- };
- const r = entity[b];
- return typeof r === 'string' ? r : matchStr;
- });
- return result;
- };
- template.defaults.imports.markForName = function (key) {
- try {
- if (apipostData.project.vars.mark.filter((it) => it.key === key)[0].name) {
- return apipostData.project.vars.mark.filter((it) => it.key === key)[0].name;
- }
- return '开发中';
- } catch (error) {
- return '开发中';
- }
- };
- // 接口排序
- function sortData(data, type) {
- data.sort((a, b) => {
- // 升序
- if (type == 'ascending') {
- if (a.sort != b.sort) {
- return a.sort - b.sort;
- }
- return a.name.localeCompare(b.name);
- }
- // 降序
- if (type == 'descending') {
- if (a.sort != b.sort) {
- return b.sort - a.sort;
- }
- return b.name.localeCompare(a.name);
- }
- });
- // 如果有嵌套children且children里面有数据 就递归调用排序函数
- if (_.isArray(data)) {
- data.forEach((item) => {
- if (item.children && item.children.length != 0) {
- sortData(item.children, type);
- }
- });
- return data;
- }
- return [];
- }
- // 解析 url 并返回数组
- function GetUrlQuery(uri) {
- let url = '';
- if (typeof uri === 'undefined') {
- url = window.location.search;
- } else {
- url = `?${uri.split('?')[1]}`;
- }
- const theRequest = {};
- if (url.indexOf('?') !== -1) {
- const str = url.substr(1);
- const strs = str.split('&');
- for (let i = 0; i < strs.length; i++) {
- theRequest[strs[i].split('=')[0]] = unescape(strs[i].split('=')[1]);
- }
- }
- return theRequest;
- }
- // 获取某接口的 所有父target
- function getParentTargetIDs(collection, target_id, parent_ids = []) {
- if (_.isArray(collection)) {
- const item = _.find(collection, _.matchesProperty('target_id', target_id));
- if (item) {
- parent_ids.push(item.parent_id);
- getParentTargetIDs(collection, item.parent_id, parent_ids);
- }
- }
- return parent_ids;
- }
- // 获取某接口的 所有子target
- function getChildrenTargetIDs(collection, target_id, children_ids = []) {
- if (_.isArray(collection)) {
- collection.forEach(item => {
- if (item.parent_id == target_id) {
- children_ids.push(item.target_id);
- getChildrenTargetIDs(collection, item.target_id, children_ids);
- }
- })
- }
- return children_ids;
- }
- // // 获取某接口的 所有子target
- // function getChildrenTargetIDs(collection, target_id, children_ids = []) {
- // if (_.isArray(collection)) {
- // collection.forEach(item => {
- // if (item.target_id == target_id) {
- // if (item.children && _.isArray(item.children)) {
- // item.children.forEach((it) => {
- // children_ids.push(it.target_id);
- // if (it.children && _.isArray(it.children)) {
- // getChildrenTargetIDs(it.children, it.target_id, children_ids);
- // }
- // })
- // }
- // }
- // })
- // }
- // return children_ids;
- // }
- // 接口数据
- let apipostData = {};
- try {
- apipostData = {"data":{"id":1201743,"local_issue_id":"7997f359bf5bceba64dd3117c88eeb39","local_target_id":"afca0fa6-d999-4e1c-a4b8-53e11562ec95","project_id":2354823,"name":"React Demo","url":"61649f3cb2e5986a","salt":"fe93ce7b9b85cea4","password":"","env_id":"-1","create_time":1687078091,"target_id":-1,"target_type":"folder","expire_days":-1,"expire_time":-1,"attribute_list":[],"env_ids":["-1"],"portrait":"https:\/\/img.cdn.apipost.cn\/user\/default_profile_photo\/Vector-4.png","nick_name":"郭小侠","app_web_url":"https:\/\/v7-api.apipost.cn","project_name":"郭小侠项目","publisher":"郭小侠","pub_name":"React Demo","project_logo":"","project":{"vars":{"request":{"cookie":[],"header":[],"query":[],"body":[]},"script":{"pre_script":"","test":"","auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}}},"variable":[],"methods":["POST","GET","PUT","PATCH","DELETE","COPY","HEAD","OPTIONS","LINK","UNLINK","PURGE","LOCK","UNLOCK","PROPFIND","VIEW"],"mark":[{"key":"developing","name":"开发中","color":"#3A86FF","is_default":true},{"key":"complated","name":"已完成","color":"#2BA58F","is_default":true},{"key":"modifying","name":"需修改","color":"#EC4646","is_default":true}]},"code_list":[],"attribute_list":[]},"attribute_lists":[],"children":[{"local_target_id":"afca0fa6-d999-4e1c-a4b8-53e11562ec95","local_parent_id":"0","name":"React Demo","method":"POST","mark":"developing","is_doc":0,"target_type":"folder","example_type":"0","project_id":2354823,"status":1,"sort":10,"create_dtime":1686464657,"update_dtime":1686464657,"local_server_id":"","target_id":"afca0fa6-d999-4e1c-a4b8-53e11562ec95","modifier_id":"U8JG3929D1C8","extend_server_id":"","create_time":"2023-06-11 14:24:17","create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"color":"#3A86FF","attribute_lists":[],"script":{"pre_script":"","test":"","pre_script_switch":1,"test_switch":1},"request":{"description":"","header":[],"query":[],"body":[],"auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}}},"parent_id":"0","children":[{"local_target_id":"d6b3364a-6498-4e6e-8d33-c06b9fe329f8","local_parent_id":"afca0fa6-d999-4e1c-a4b8-53e11562ec95","name":"登录","method":"POST","mark":"complated","is_doc":0,"target_type":"api","example_type":"0","project_id":"1849985d-3c7e-485e-9e68-79958eb62a29","status":1,"sort":0,"create_dtime":1686464742,"update_dtime":1686464742,"local_server_id":"","target_id":"d6b3364a-6498-4e6e-8d33-c06b9fe329f8","modifier_id":"U8JG3929D1C8","extend_server_id":"","create_time":"2023-06-11 14:25:42","create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"color":"#2BA58F","attribute_lists":[],"enable_server_mock":-1,"mock_server_url":"","mock_url":"","new_target_id":"9b804911-dd46-4999-acb0-d6b539938bee","request":{"url":"http:\/\/localhost:4000\/v1\/login","description":"","body":{"mode":"urlencoded","parameter":[{"description":"账号","field_type":"String","is_checked":1,"key":"username","value":"daxia","not_null":1,"type":"Text","value_var":"","key_var":""},{"description":"密码","field_type":"String","is_checked":1,"key":"password","value":"123456","not_null":1,"type":"Text","value_var":"","key_var":""}],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""},"digest":{"username":"","password":"","realm":"","nonce":"","algorithm":"","qop":"","nc":"","cnonce":"","opaque":""},"hawk":{"authId":"","authKey":"","algorithm":"","user":"","nonce":"","extraData":"","app":"","delegation":"","timestamp":"","includePayloadHash":-1},"awsv4":{"accessKey":"","secretKey":"","region":"","service":"","sessionToken":"","addAuthDataToQuery":-1},"ntlm":{"username":"","password":"","domain":"","workstation":"","disableRetryRequest":1},"edgegrid":{"accessToken":"","clientToken":"","clientSecret":"","nonce":"","timestamp":"","baseURi":"","headersToSign":""},"oauth1":{"consumerKey":"","consumerSecret":"","signatureMethod":"","addEmptyParamsToSign":-1,"includeBodyHash":-1,"addParamsToHeader":-1,"realm":"","version":"1.0","nonce":"","timestamp":"","verifier":"","callback":"","tokenSecret":"","token":""}},"header":{"parameter":[]},"query":{"parameter":[]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"origin_url":"http:\/\/localhost:4000\/v1\/login"},"response":{"success":{"raw":"","parameter":[],"expect":{"name":"成功","isDefault":1,"code":200,"contentType":"json","verifyType":"schema","schema":[],"mock":""}},"error":{"raw":"","parameter":[],"expect":{"name":"失败","isDefault":-1,"code":404,"contentType":"json","verifyType":"schema","schema":[],"mock":""}}},"parent_id":"afca0fa6-d999-4e1c-a4b8-53e11562ec95"},{"local_target_id":"75992af3-4218-4227-b753-f715b32a6d88","local_parent_id":"afca0fa6-d999-4e1c-a4b8-53e11562ec95","name":"代办","method":"POST","mark":"developing","is_doc":0,"target_type":"folder","example_type":"0","project_id":2354823,"status":1,"sort":1,"create_dtime":1686466504,"update_dtime":1686469713,"local_server_id":"","target_id":"75992af3-4218-4227-b753-f715b32a6d88","modifier_id":"U8JG3929D1C8","extend_server_id":"","create_time":"2023-06-11 14:55:04","create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"color":"#3A86FF","attribute_lists":[],"script":{"pre_script":"","test":"","pre_script_switch":1,"test_switch":1},"request":{"description":"","header":[{"description":"","field_type":"String","is_checked":1,"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJkYXhpYSIsInBhc3N3b3JkIjoiZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2UiLCJzdGF0dXMiOjEsIm5pY2tuYW1lIjpudWxsLCJhdmF0YXIiOm51bGwsImFkZHJlc3MiOm51bGwsImNvbXBhbnkiOm51bGwsImRlcGFydG1lbnQiOm51bGwsInBvc2l0aW9uIjpudWxsLCJkZXNjcmlwdGlvbiI6bnVsbCwiY3JlYXRlX3RpbWUiOiIyMDIzLTA2LTA1VDA1OjM5OjA3LjAwMFoiLCJpYXQiOjE2ODY0NjQ3MzQsImV4cCI6MTY4NjUwMDczNH0.Mb9p3Db4ihIwQoDkWf1hVOPLehQ3x3DzLydQU8jrRVk","not_null":1,"type":"Text","value_var":"","key_var":""}],"query":[],"body":[],"auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}}},"parent_id":"afca0fa6-d999-4e1c-a4b8-53e11562ec95","children":[{"local_target_id":"11eb021f-7c92-45e0-9f27-927107f1987c","local_parent_id":"75992af3-4218-4227-b753-f715b32a6d88","name":"查询代办","method":"GET","mark":"complated","is_doc":0,"target_type":"api","example_type":"0","project_id":"1849985d-3c7e-485e-9e68-79958eb62a29","status":1,"sort":0,"create_dtime":1686466512,"update_dtime":1687057732,"local_server_id":"","target_id":"11eb021f-7c92-45e0-9f27-927107f1987c","modifier_id":"U8JG3929D1C8","extend_server_id":"","create_time":"2023-06-11 14:55:12","create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"color":"#2BA58F","attribute_lists":[],"enable_server_mock":-1,"mock_server_url":"","mock_url":"","new_target_id":"8f795d61-14af-4b2b-99f4-e247d675a187","request":{"url":"http:\/\/localhost:4000\/v1\/todos\/page?current=1&count=10&title=&status=","description":"","body":{"mode":"none","parameter":[],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""},"digest":{"username":"","password":"","realm":"","nonce":"","algorithm":"","qop":"","nc":"","cnonce":"","opaque":""},"hawk":{"authId":"","authKey":"","algorithm":"","user":"","nonce":"","extraData":"","app":"","delegation":"","timestamp":"","includePayloadHash":-1},"awsv4":{"accessKey":"","secretKey":"","region":"","service":"","sessionToken":"","addAuthDataToQuery":-1},"ntlm":{"username":"","password":"","domain":"","workstation":"","disableRetryRequest":1},"edgegrid":{"accessToken":"","clientToken":"","clientSecret":"","nonce":"","timestamp":"","baseURi":"","headersToSign":""},"oauth1":{"consumerKey":"","consumerSecret":"","signatureMethod":"","addEmptyParamsToSign":-1,"includeBodyHash":-1,"addParamsToHeader":-1,"realm":"","version":"1.0","nonce":"","timestamp":"","verifier":"","callback":"","tokenSecret":"","token":""}},"header":{"parameter":[{"description":"","field_type":"String","is_checked":1,"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJkYXhpYSIsInBhc3N3b3JkIjoiZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2UiLCJzdGF0dXMiOjEsIm5pY2tuYW1lIjpudWxsLCJhdmF0YXIiOm51bGwsImFkZHJlc3MiOm51bGwsImNvbXBhbnkiOm51bGwsImRlcGFydG1lbnQiOm51bGwsInBvc2l0aW9uIjpudWxsLCJkZXNjcmlwdGlvbiI6bnVsbCwiY3JlYXRlX3RpbWUiOiIyMDIzLTA2LTA1VDA1OjM5OjA3LjAwMFoiLCJpYXQiOjE2ODY0NjQ3MzQsImV4cCI6MTY4NjUwMDczNH0.Mb9p3Db4ihIwQoDkWf1hVOPLehQ3x3DzLydQU8jrRVk","not_null":1,"type":"Text","value_var":"","key_var":""}]},"query":{"parameter":[{"description":"","is_checked":1,"key":"current","type":"Text","not_null":1,"field_type":"String","value":"1","value_var":"","key_var":""},{"description":"","is_checked":1,"key":"count","type":"Text","not_null":1,"field_type":"String","value":"10","value_var":"","key_var":""},{"description":"","field_type":"String","is_checked":1,"key":"title","value":"","not_null":1,"type":"Text","value_var":"","key_var":""},{"description":"","field_type":"String","is_checked":1,"key":"status","value":"","not_null":1,"type":"Text","value_var":"","key_var":""}]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"origin_url":"http:\/\/localhost:4000\/v1\/todos\/page?current=1&count=10&title=&status="},"response":{"success":{"raw":"","parameter":[],"expect":{"name":"成功","isDefault":1,"code":200,"contentType":"json","verifyType":"schema","schema":[],"mock":""}},"error":{"raw":"","parameter":[],"expect":{"name":"失败","isDefault":-1,"code":404,"contentType":"json","verifyType":"schema","schema":[],"mock":""}}},"parent_id":"75992af3-4218-4227-b753-f715b32a6d88"},{"local_target_id":"d28bea6d-4d83-47e0-8735-c63574c4b611","local_parent_id":"75992af3-4218-4227-b753-f715b32a6d88","name":"添加代办","method":"POST","mark":"complated","is_doc":0,"target_type":"api","example_type":"0","project_id":"1849985d-3c7e-485e-9e68-79958eb62a29","status":1,"sort":1,"create_dtime":1686464787,"update_dtime":1686469935,"local_server_id":"","target_id":"d28bea6d-4d83-47e0-8735-c63574c4b611","modifier_id":"U8JG3929D1C8","extend_server_id":"","create_time":"2023-06-11 14:26:27","create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"color":"#2BA58F","attribute_lists":[],"enable_server_mock":-1,"mock_server_url":"","mock_url":"","new_target_id":"b76f1dc6-2707-4563-859e-ebf2b085e863","request":{"url":"http:\/\/localhost:4000\/v1\/todos\/add","description":"","body":{"mode":"urlencoded","parameter":[{"description":"","field_type":"String","is_checked":1,"key":"title","value":"观风景","not_null":1,"type":"Text","value_var":"","key_var":""},{"description":"","field_type":"String","is_checked":1,"key":"description","value":"一个背包,一个人的旅行,遇见无数擦肩而过的陌生人,目的地也是随心情而临时决定,在陌生的城市寻找与众不同的风景,你总是一个念头就开始说走就走的旅行。","not_null":1,"type":"Text","value_var":"","key_var":""},{"description":"","field_type":"String","is_checked":1,"key":"cover","value":"https:\/\/bing.ioliu.cn\/v1\/rand?&t=json&w=320&h=320","not_null":1,"type":"Text","value_var":"","key_var":""},{"description":"","field_type":"String","is_checked":1,"key":"","value":"","not_null":1,"type":"Text","value_var":"","key_var":""}],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""},"digest":{"username":"","password":"","realm":"","nonce":"","algorithm":"","qop":"","nc":"","cnonce":"","opaque":""},"hawk":{"authId":"","authKey":"","algorithm":"","user":"","nonce":"","extraData":"","app":"","delegation":"","timestamp":"","includePayloadHash":-1},"awsv4":{"accessKey":"","secretKey":"","region":"","service":"","sessionToken":"","addAuthDataToQuery":-1},"ntlm":{"username":"","password":"","domain":"","workstation":"","disableRetryRequest":1},"edgegrid":{"accessToken":"","clientToken":"","clientSecret":"","nonce":"","timestamp":"","baseURi":"","headersToSign":""},"oauth1":{"consumerKey":"","consumerSecret":"","signatureMethod":"","addEmptyParamsToSign":-1,"includeBodyHash":-1,"addParamsToHeader":-1,"realm":"","version":"1.0","nonce":"","timestamp":"","verifier":"","callback":"","tokenSecret":"","token":""}},"header":{"parameter":[{"description":"","field_type":"String","is_checked":1,"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJkYXhpYSIsInBhc3N3b3JkIjoiZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2UiLCJzdGF0dXMiOjEsIm5pY2tuYW1lIjpudWxsLCJhdmF0YXIiOm51bGwsImFkZHJlc3MiOm51bGwsImNvbXBhbnkiOm51bGwsImRlcGFydG1lbnQiOm51bGwsInBvc2l0aW9uIjpudWxsLCJkZXNjcmlwdGlvbiI6bnVsbCwiY3JlYXRlX3RpbWUiOiIyMDIzLTA2LTA1VDA1OjM5OjA3LjAwMFoiLCJpYXQiOjE2ODY0NjQ3MzQsImV4cCI6MTY4NjUwMDczNH0.Mb9p3Db4ihIwQoDkWf1hVOPLehQ3x3DzLydQU8jrRVk","not_null":1,"type":"Text","value_var":"","key_var":""}]},"query":{"parameter":[]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"origin_url":"http:\/\/localhost:4000\/v1\/todos\/add"},"response":{"success":{"raw":"","parameter":[],"expect":{"name":"成功","isDefault":1,"code":200,"contentType":"json","verifyType":"schema","schema":[],"mock":""}},"error":{"raw":"","parameter":[],"expect":{"name":"失败","isDefault":-1,"code":404,"contentType":"json","verifyType":"schema","schema":[],"mock":""}}},"parent_id":"75992af3-4218-4227-b753-f715b32a6d88"},{"local_target_id":"2fd3f25e-4af5-45b3-9e79-03cbc990df3f","local_parent_id":"75992af3-4218-4227-b753-f715b32a6d88","name":"删除代办","method":"DELETE","mark":"complated","is_doc":0,"target_type":"api","example_type":"0","project_id":"1849985d-3c7e-485e-9e68-79958eb62a29","status":1,"sort":2,"create_dtime":1686468550,"update_dtime":1686469787,"local_server_id":"","target_id":"2fd3f25e-4af5-45b3-9e79-03cbc990df3f","modifier_id":"U8JG3929D1C8","extend_server_id":"","create_time":"2023-06-11 15:29:10","create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"color":"#2BA58F","attribute_lists":[],"enable_server_mock":-1,"mock_server_url":"","mock_url":"","new_target_id":"81f5832b-5e74-4446-9c17-ae76cf8c268c","request":{"url":"http:\/\/localhost:4000\/v1\/todos\/delete\/1","description":"","body":{"mode":"none","parameter":[],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""},"digest":{"username":"","password":"","realm":"","nonce":"","algorithm":"","qop":"","nc":"","cnonce":"","opaque":""},"hawk":{"authId":"","authKey":"","algorithm":"","user":"","nonce":"","extraData":"","app":"","delegation":"","timestamp":"","includePayloadHash":-1},"awsv4":{"accessKey":"","secretKey":"","region":"","service":"","sessionToken":"","addAuthDataToQuery":-1},"ntlm":{"username":"","password":"","domain":"","workstation":"","disableRetryRequest":1},"edgegrid":{"accessToken":"","clientToken":"","clientSecret":"","nonce":"","timestamp":"","baseURi":"","headersToSign":""},"oauth1":{"consumerKey":"","consumerSecret":"","signatureMethod":"","addEmptyParamsToSign":-1,"includeBodyHash":-1,"addParamsToHeader":-1,"realm":"","version":"1.0","nonce":"","timestamp":"","verifier":"","callback":"","tokenSecret":"","token":""}},"header":{"parameter":[{"description":"","field_type":"String","is_checked":1,"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJkYXhpYSIsInBhc3N3b3JkIjoiZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2UiLCJzdGF0dXMiOjEsIm5pY2tuYW1lIjpudWxsLCJhdmF0YXIiOm51bGwsImFkZHJlc3MiOm51bGwsImNvbXBhbnkiOm51bGwsImRlcGFydG1lbnQiOm51bGwsInBvc2l0aW9uIjpudWxsLCJkZXNjcmlwdGlvbiI6bnVsbCwiY3JlYXRlX3RpbWUiOiIyMDIzLTA2LTA1VDA1OjM5OjA3LjAwMFoiLCJpYXQiOjE2ODY0NjQ3MzQsImV4cCI6MTY4NjUwMDczNH0.Mb9p3Db4ihIwQoDkWf1hVOPLehQ3x3DzLydQU8jrRVk","not_null":1,"type":"Text","value_var":"","key_var":""}]},"query":{"parameter":[]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"origin_url":"http:\/\/localhost:4000\/v1\/todos\/delete\/1"},"response":{"success":{"raw":"","parameter":[],"expect":{"name":"成功","isDefault":1,"code":200,"contentType":"json","verifyType":"schema","schema":[],"mock":""}},"error":{"raw":"","parameter":[],"expect":{"name":"失败","isDefault":-1,"code":404,"contentType":"json","verifyType":"schema","schema":[],"mock":""}}},"parent_id":"75992af3-4218-4227-b753-f715b32a6d88"},{"local_target_id":"011fec25-301e-4e13-85c5-8562eadebd68","local_parent_id":"75992af3-4218-4227-b753-f715b32a6d88","name":"编辑代办","method":"POST","mark":"complated","is_doc":0,"target_type":"api","example_type":"0","project_id":"1849985d-3c7e-485e-9e68-79958eb62a29","status":1,"sort":3,"create_dtime":1686468575,"update_dtime":1687077018,"local_server_id":"","target_id":"011fec25-301e-4e13-85c5-8562eadebd68","modifier_id":"U8JG3929D1C8","extend_server_id":"","create_time":"2023-06-11 15:29:35","create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"color":"#2BA58F","attribute_lists":[],"enable_server_mock":-1,"mock_server_url":"","mock_url":"","new_target_id":"bb94413b-2c37-44ca-850d-c66c811d2e57","request":{"url":"http:\/\/localhost:4000\/v1\/todos\/edit","description":"","body":{"mode":"urlencoded","parameter":[{"description":"","field_type":"Number","is_checked":1,"key":"id","value":"1","not_null":1,"type":"Text","value_var":"","key_var":""},{"description":"","field_type":"String","is_checked":1,"key":"title","value":"观风景","not_null":1,"type":"Text","value_var":"","key_var":""},{"description":"","field_type":"String","is_checked":1,"key":"description","value":"一个背包,一个人的旅行,遇见无数擦肩而过的陌生人,目的地也是随心情而临时决定,在陌生的城市寻找与众不同的风景,你总是一个念头就开始说走就走的旅行。","not_null":1,"type":"Text","value_var":"","key_var":""},{"description":"","field_type":"String","is_checked":1,"key":"cover","value":"https:\/\/bing.ioliu.cn\/v1\/rand?&t=json&w=320&h=320","not_null":1,"type":"Text","value_var":"","key_var":""},{"description":"","field_type":"Number","is_checked":1,"key":"status","value":"","not_null":1,"type":"Text","value_var":"","key_var":""}],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""},"digest":{"username":"","password":"","realm":"","nonce":"","algorithm":"","qop":"","nc":"","cnonce":"","opaque":""},"hawk":{"authId":"","authKey":"","algorithm":"","user":"","nonce":"","extraData":"","app":"","delegation":"","timestamp":"","includePayloadHash":-1},"awsv4":{"accessKey":"","secretKey":"","region":"","service":"","sessionToken":"","addAuthDataToQuery":-1},"ntlm":{"username":"","password":"","domain":"","workstation":"","disableRetryRequest":1},"edgegrid":{"accessToken":"","clientToken":"","clientSecret":"","nonce":"","timestamp":"","baseURi":"","headersToSign":""},"oauth1":{"consumerKey":"","consumerSecret":"","signatureMethod":"","addEmptyParamsToSign":-1,"includeBodyHash":-1,"addParamsToHeader":-1,"realm":"","version":"1.0","nonce":"","timestamp":"","verifier":"","callback":"","tokenSecret":"","token":""}},"header":{"parameter":[{"description":"","field_type":"String","is_checked":1,"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJkYXhpYSIsInBhc3N3b3JkIjoiZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2UiLCJzdGF0dXMiOjEsIm5pY2tuYW1lIjpudWxsLCJhdmF0YXIiOm51bGwsImFkZHJlc3MiOm51bGwsImNvbXBhbnkiOm51bGwsImRlcGFydG1lbnQiOm51bGwsInBvc2l0aW9uIjpudWxsLCJkZXNjcmlwdGlvbiI6bnVsbCwiY3JlYXRlX3RpbWUiOiIyMDIzLTA2LTA1VDA1OjM5OjA3LjAwMFoiLCJpYXQiOjE2ODY0NjQ3MzQsImV4cCI6MTY4NjUwMDczNH0.Mb9p3Db4ihIwQoDkWf1hVOPLehQ3x3DzLydQU8jrRVk","not_null":1,"type":"Text","value_var":"","key_var":""},{"description":"","field_type":"String","is_checked":1,"key":"","value":"","not_null":1,"type":"Text","value_var":"","key_var":""}]},"query":{"parameter":[]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"origin_url":"http:\/\/localhost:4000\/v1\/todos\/edit"},"response":{"success":{"raw":"","parameter":[],"expect":{"name":"成功","isDefault":1,"code":200,"contentType":"json","verifyType":"schema","schema":[],"mock":""}},"error":{"raw":"","parameter":[],"expect":{"name":"失败","isDefault":-1,"code":404,"contentType":"json","verifyType":"schema","schema":[],"mock":""}}},"parent_id":"75992af3-4218-4227-b753-f715b32a6d88"}]},{"local_target_id":"d57bfba1-8bde-4aa4-b76d-3d60840a8a6a","local_parent_id":"afca0fa6-d999-4e1c-a4b8-53e11562ec95","name":"文件上传","method":"PUT","mark":"developing","is_doc":0,"target_type":"api","example_type":"0","project_id":"1849985d-3c7e-485e-9e68-79958eb62a29","status":1,"sort":2,"create_dtime":1687007443,"update_dtime":1687007725,"local_server_id":"","target_id":"d57bfba1-8bde-4aa4-b76d-3d60840a8a6a","modifier_id":"U8JG3929D1C8","extend_server_id":"","create_time":"2023-06-17 21:10:43","create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"color":"#3A86FF","attribute_lists":[],"enable_server_mock":-1,"mock_server_url":"","mock_url":"","new_target_id":"307ad552-2323-4212-b894-6d32ee08bc34","request":{"url":"http:\/\/localhost:4000\/v1\/upload","description":"","body":{"mode":"form-data","parameter":[{"description":"","field_type":"String","is_checked":1,"key":"folder","value":"covers","not_null":1,"type":"Text","value_var":"","key_var":""},{"description":"","field_type":"String","is_checked":1,"key":"cover","value":["\/Users\/daxia\/Desktop\/images\/zhangbu.png"],"not_null":1,"type":"File","filename":"zhangbu.png","fileBase64":[],"value_var":"","key_var":""}],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""},"digest":{"username":"","password":"","realm":"","nonce":"","algorithm":"","qop":"","nc":"","cnonce":"","opaque":""},"hawk":{"authId":"","authKey":"","algorithm":"","user":"","nonce":"","extraData":"","app":"","delegation":"","timestamp":"","includePayloadHash":-1},"awsv4":{"accessKey":"","secretKey":"","region":"","service":"","sessionToken":"","addAuthDataToQuery":-1},"ntlm":{"username":"","password":"","domain":"","workstation":"","disableRetryRequest":1},"edgegrid":{"accessToken":"","clientToken":"","clientSecret":"","nonce":"","timestamp":"","baseURi":"","headersToSign":""},"oauth1":{"consumerKey":"","consumerSecret":"","signatureMethod":"","addEmptyParamsToSign":-1,"includeBodyHash":-1,"addParamsToHeader":-1,"realm":"","version":"1.0","nonce":"","timestamp":"","verifier":"","callback":"","tokenSecret":"","token":""}},"header":{"parameter":[{"description":"","field_type":"String","is_checked":1,"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJkYXhpYSIsInBhc3N3b3JkIjoiZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2UiLCJzdGF0dXMiOjEsIm5pY2tuYW1lIjpudWxsLCJhdmF0YXIiOm51bGwsImFkZHJlc3MiOm51bGwsImNvbXBhbnkiOm51bGwsImRlcGFydG1lbnQiOm51bGwsInBvc2l0aW9uIjpudWxsLCJkZXNjcmlwdGlvbiI6bnVsbCwiY3JlYXRlX3RpbWUiOiIyMDIzLTA2LTA1VDA1OjM5OjA3LjAwMFoiLCJpYXQiOjE2ODY5ODg2MDEsImV4cCI6MTY4NzAyNDYwMX0.9DXzrDLA6t9E8md2TZGlRhVbcaWUU0e2UHGunwGwbsE","not_null":1,"type":"Text","value_var":"","key_var":""}]},"query":{"parameter":[]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"origin_url":"http:\/\/localhost:4000\/v1\/upload"},"response":{"success":{"raw":"","parameter":[],"expect":{"name":"成功","isDefault":1,"code":200,"contentType":"json","verifyType":"schema","schema":[],"mock":""}},"error":{"raw":"","parameter":[],"expect":{"name":"失败","isDefault":-1,"code":404,"contentType":"json","verifyType":"schema","schema":[],"mock":""}}},"parent_id":"afca0fa6-d999-4e1c-a4b8-53e11562ec95"}]}]}};
- apipostData = apipostData.data;
- consoleLog('apipostData ---- ',apipostData);
- } catch (e) { }
- if (!_.isEmpty(apipostData)) {
- if (!_.isArray(apipostData.children)) {
- apipostData.children = [];
- }
- // 导航菜单
- apipostData.children = sortData(apipostData.children, 'ascending');
- // 数据词典(对象,键为target_id)
- const dataDB = {};
- const ruleType = (data) => {
- const d = Object.prototype.toString.call(data);
- return d.substr(8, d.length - 9);
- };
- const renderListtoObject = (List) => {
- if (ruleType(List) === 'Array') {
- List &&
- List.forEach((item) => {
- if (item.children) {
- renderListtoObject(item.children);
- dataDB[item.target_id] = item;
- } else {
- dataDB[item.target_id] = item;
- }
- });
- }
- };
- // 搜索
- $(document).on('input', 'input[name="search-input"]', function () {
- let keyword = _.toLower($(this).val());
- let searchResult = [];
- if (keyword == '') {
- $('.apipost-left-nav-template').find('li').removeClass('is-search-hidden search-toggle');
- } else {
- if (_.isObject(dataDB) && !_.isEmpty(dataDB)) {
- _.forEach(dataDB, function (item) {
- consoleLog(_.toLower(item.name), keyword, _.toLower(item.name).indexOf(keyword))
- if (_.toLower(item.url).indexOf(keyword) > -1 || _.toLower(item.name).indexOf(keyword) > -1 || _.toLower(item.method).indexOf(keyword) > -1) {
- searchResult.push(item.target_id);
- }
- });
- if (searchResult.length == 0) {
- $('.apipost-left-nav-template').find('li').addClass('is-search-hidden');
- } else {
- searchResult.forEach(target_id => {
- searchResult = _.concat(searchResult, getParentTargetIDs(Object.values(dataDB), target_id));
- })
- }
- // 隐藏其他
- _.difference(Object.keys(dataDB), searchResult).forEach(hidden_target_id => {
- $(`.apipost-left-nav-template li[data-target_id="${hidden_target_id}"]`).addClass('is-search-hidden');
- $(`.apipost-left-nav-template li[data-target_id="${hidden_target_id}"][data-type="folder"]`).addClass('search-toggle');
- })
- // 展示结果
- searchResult.forEach(show_target_id => {
- $(`.apipost-left-nav-template li[data-target_id="${show_target_id}"]`).removeClass('is-search-hidden is-hidden search-toggle');
- $(`.apipost-left-nav-template li[data-target_id="${show_target_id}"][data-type="folder"]`).removeClass('search-toggle');
- })
- }
- }
- })
- renderListtoObject(apipostData.children);
- // 获取当前的target_id
- let _target_id = '001';
- const _urlParas = GetUrlQuery();
- if (_.isObject(_urlParas) && _.isString(_urlParas.target_id)) {
- _target_id = _urlParas.target_id;
- }
- // 修改地址栏
- function changeURLStatic(name, value) {
- const url = changeURLParam(location.href, name, value); // 修改 URL 参数
- history.replaceState(null, null, url); // 替换地址栏
- }
- function changeURLParam(url, name, value) {
- const reg = eval(`/([?|&]${name}=)[^&]*/gi`);
- value = value.toString().replace(/(^\s*)|(\s*$)/g, ''); // 移除首尾空格
- let url2;
- if (!value) {
- // remove
- url2 = url.replace(reg, '');
- } else if (url.match(reg)) {
- // edit
- url2 = url.replace(reg, `$1${value}`);
- } else {
- // add
- url2 = `${url + (url.indexOf('?') > -1 ? '&' : '?') + name}=${value}`;
- }
- return url2;
- }
- // 格式化内容
- function formatJson(json) {
- // consoleLog(json, apipostData);
- // name
- if (json.target_type == 'global') {
- _.set(json, 'name', '全局公共参数');
- }
- // mark
- if (_.has(apipostData, 'project.vars.mark') && _.isArray(apipostData.project.vars.mark)) {
- const _markedObj = {};
- apipostData.project.vars.mark.forEach((item) => {
- _markedObj[item.key] = item;
- });
- if (_.isObject(_markedObj[json.mark])) {
- _.set(json, 'formatMark', _markedObj[json.mark]);
- }
- }
- // time
- if (_.isNumber(json.create_dtime)) {
- if (String(json.create_dtime).length == 10) {
- _.set(
- json,
- 'format_create_dtime',
- dayjs.unix(json.create_dtime).format('YYYY-MM-DD HH:mm:ss')
- );
- }
- if (String(json.create_dtime).length == 13) {
- _.set(json, 'format_create_dtime', dayjs(json.create_dtime).format('YYYY-MM-DD HH:mm:ss'));
- }
- } else {
- if (_.isString(json.create_dtime)) {
- _.set(json, 'format_create_dtime', json.create_dtime);
- } else {
- _.set(json, 'format_create_dtime', dayjs().format('YYYY-MM-DD HH:mm:ss'));
- }
- }
- if (_.isNumber(json.update_dtime)) {
- if (String(json.update_dtime).length == 10) {
- _.set(
- json,
- 'format_update_dtime',
- dayjs.unix(json.update_dtime).format('YYYY-MM-DD HH:mm:ss')
- );
- }
- if (String(json.update_dtime).length == 13) {
- _.set(json, 'format_update_dtime', dayjs(json.update_dtime).format('YYYY-MM-DD HH:mm:ss'));
- }
- } else {
- if (_.isString(json.update_dtime)) {
- _.set(json, 'format_update_dtime', json.update_dtime);
- } else {
- _.set(json, 'format_update_dtime', dayjs().format('YYYY-MM-DD HH:mm:ss'));
- }
- }
- // formatMode
- if (_.has(json, 'request.body.mode')) {
- switch (json.request.body.mode) {
- case 'none':
- break;
- case 'form-data':
- _.set(json, 'request.body.formatMode', 'multipart/form-data');
- break;
- case 'urlencoded':
- _.set(json, 'request.body.formatMode', 'application/x-www-form-urlencoded');
- break;
- case 'json':
- _.set(json, 'request.body.formatMode', 'application/json');
- break;
- case 'xml':
- _.set(json, 'request.body.formatMode', 'application/xml');
- break;
- case 'javascript':
- _.set(json, 'request.body.formatMode', 'application/javascript');
- break;
- case 'plain':
- _.set(json, 'request.body.formatMode', 'text/plain');
- break;
- case 'html':
- _.set(json, 'request.body.formatMode', 'text/html');
- break;
- }
- }
- if(_.has(json, 'request.auth.type')) {
- switch (json.request.auth.type) {
- case 'noauth':
- _.set(json, 'request.authType', '无需认证');
- break;
- case 'awsv4':
- _.set(json, 'request.authType', 'AWS Signature');
- break;
- case 'basic':
- _.set(json, 'request.authType', 'Basic auth');
- break;
- case 'bearer':
- _.set(json, 'request.authType', 'Bearer auth');
- break;
- case 'digest':
- _.set(json, 'request.authType', 'Digest auth');
- break;
- case 'edgegrid':
- _.set(json, 'request.authType', 'Akamai EdgeGrid');
- break;
- case 'hawk':
- _.set(json, 'request.authType', 'Hawk authentication');
- break;
- case 'kv':
- _.set(json, 'request.authType', '私密键值对');
- break;
- case 'ntlm':
- _.set(json, 'request.authType', 'NTLM Authentication');
- break;
- case 'oauth1':
- _.set(json, 'request.authType', 'OAuth 1.0');
- break;
- }
- }
- json.url = json.request.url;
- return json;
- }
- // 加载当前数据
- function loadData(_target_id,dataDB) {
- // 获取当前的数据信息
- let _targetData = {};
- // 右侧浮动导航
- let floatNavs = [];
- if(_target_id == '001'){
- if (_.isObject(dataDB[_target_id])) {
- _targetData = _.cloneDeep(dataDB[_target_id]);
- } else if (
- _.has(apipostData, 'project.vars.request') &&
- _.isObject(apipostData.project.vars.request)
- ) {
- _targetData = {
- target_type: 'global',
- request: apipostData.project.vars.request,
- script: apipostData.project.vars.script,
- };
- } else {
- _targetData = {
- target_type: 'none',
- request: {},
- };
- }
- _targetData = formatJson(_targetData);
- $('.apipost-doc-body-nav-list').find('li').removeClass('active');
- $('.apipost-doc-body-nav-list')
- .find(`li[data-target_id="${_target_id}"]`)
- .eq(0)
- .addClass('active')
- .toggleClass('toggle search-toggle');
- // const children_ids = getChildrenTargetIDs(Object.values(dataDB), _target_id);
- //
- // if (_.isArray(children_ids)) {
- // if (
- // $('.apipost-doc-body-nav-list')
- // .find(`li[data-target_id="${_target_id}"]`)
- // .eq(0)
- // .hasClass('toggle')
- // ) {
- // children_ids.forEach((target_id) => {
- // if ($(`li[data-target_id="${target_id}"]`).attr('data-type') == 'folder') {
- // $(`li[data-target_id="${target_id}"]`).addClass('is-hidden toggle');
- // } else {
- // $(`li[data-target_id="${target_id}"]`).addClass('is-hidden');
- // }
- // });
- // } else {
- // children_ids.forEach((target_id) => {
- // if ($(`li[data-target_id="${target_id}"]`).attr('data-type') == 'folder') {
- // $(`li[data-target_id="${target_id}"]`).removeClass('is-hidden toggle');
- // } else {
- // $(`li[data-target_id="${target_id}"]`).removeClass('is-hidden');
- // }
- // });
- // }
- // }
- _targetData.copyData = JSON.parse(JSON.stringify(_targetData));
- if(_targetData.copyData.target_type == 'example'){
- _targetData.copyData.target_type = _targetData.copyData.example_type;
- }
- // 加载左侧内容
- const _docContentHtml = template('apipost-doc-wrap-tpl', {
- data: _targetData,
- target_id: _target_id,
- });
- $('.apipost-doc-wrap').html(_docContentHtml);
- // 右侧浮动导航
- floatNavs = [];
- $('.apipost-doc-wrap').find('h3 ,h4, h5, h6, h7').each((i, item) => {
- let text = $(item).attr('data-text');
- let id = $(item).attr('id');
- if (text) {
- floatNavs.push({
- text, id,
- name: $(item).prop("tagName"),
- indent: $(item).prop("tagName").replace(/[^0-9]/ig, "") - 2,
- })
- }
- })
- const _floatNavs = template('apipost-float-nav-template-tpl', {
- list: floatNavs
- });
- $('.apipost-float-nav-template').html(_floatNavs);
- // 请求body raw 参数
- try {
- if (_targetData.target_type == 'grpc' || _targetData.example_type == 'grpc') {
- $('.request-body-raw-editor-json').each((i, item) => {
- let val = $(item).prev('input').val();
- if(val){
- new JsonEditor(
- `#${$(item).attr('id')}`,
- JSON5.parse(val),
- {},
- []
- ).load(JSON5.parse(val), []);
- }
- })
- }
- if (_targetData.target_type == 'api' || _targetData.example_type == 'api') {
- let obj = [];
- if (_.has(_targetData, 'request.body.raw_para')) {
- obj = _targetData.request.body.raw_para.map((itemRaw) => {
- const arr = itemRaw.key.split('.');
- itemRaw.newKey = arr[arr.length - 1];
- return itemRaw;
- });
- }
- if($('#request-body-raw-editor-input').length > 0){
- new JsonEditor('#request-body-raw-editor-json',
- JSON5.parse($('#request-body-raw-editor-input').val()),
- {},
- obj
- ).load(JSON5.parse($('#request-body-raw-editor-input').val()), obj);
- }
- }
- } catch (e) { }
- // 响应示例 raw 参数
- try {
- _.forEach(_targetData.response, function (item, key) {
- const obj = item.parameter.map((itemRaw) => {
- const arr = itemRaw.key.split('.');
- itemRaw.newKey = arr[arr.length - 1];
- return itemRaw;
- });
- if($(`#response-raw-${key}-json-input`).length > 0){
- new JsonEditor(`#response-raw-${key}-json`,
- JSON5.parse($(`#response-raw-${key}-json-input`).val()),
- {},
- obj
- ).load(JSON5.parse($(`#response-raw-${key}-json-input`).val()), obj);
- }
- });
- } catch (e) { }
- // 更新 url
- changeURLStatic('target_id', _target_id);
- // 优化 apipost-doc-paras 展示
- $('.apipost-doc-paras').each((i, item) => {
- if ($(item).children().length == 0) {
- let _id = $(item).attr('for-id');
- let _title = $(`#${_id}`).attr('data-text');
- let _tipDiv = `<div class="apipost-no-data">暂无${_title}数据</div>`;
- $(item).append(_tipDiv)
- }
- })
- }else {
- let newdata = Object.values(dataDB)
- // let LevelArr = []
- //
- // function levelTree(arr1, newarr) {
- // arr1.forEach(item => {
- // if (item.children && item.children.length > 0) {
- // newarr.push(item)
- // levelTree(item.children, newarr)
- // } else {
- // newarr.push(item)
- // }
- // })
- // }
- //
- // levelTree(newdata, LevelArr)
- newdata.forEach(item => {
- if (item.local_target_id == _target_id) {
- _targetData = formatJson(item);
- $('.apipost-doc-body-nav-list').find('li').removeClass('active');
- $('.apipost-doc-body-nav-list')
- .find(`li[data-target_id="${_target_id}"]`)
- .eq(0)
- .addClass('active')
- .toggleClass('toggle search-toggle');
- const children_ids = getChildrenTargetIDs(Object.values(dataDB), _target_id);
- if (_.isArray(children_ids)) {
- if (
- $('.apipost-doc-body-nav-list')
- .find(`li[data-target_id="${_target_id}"]`)
- .eq(0)
- .hasClass('toggle')
- ) {
- children_ids.forEach((target_id) => {
- if ($(`li[data-target_id="${target_id}"]`).attr('data-type') == 'folder') {
- $(`li[data-target_id="${target_id}"]`).addClass('is-hidden toggle');
- } else {
- $(`li[data-target_id="${target_id}"]`).addClass('is-hidden');
- }
- });
- } else {
- children_ids.forEach((target_id) => {
- if ($(`li[data-target_id="${target_id}"]`).attr('data-type') == 'folder') {
- $(`li[data-target_id="${target_id}"]`).removeClass('is-hidden toggle');
- } else {
- $(`li[data-target_id="${target_id}"]`).removeClass('is-hidden');
- }
- });
- }
- }
- // 加载左侧内容
- const _docContentHtml = template('apipost-doc-wrap-tpl', {
- data: _targetData,
- target_id: _target_id,
- });
- $('.apipost-doc-wrap').html(_docContentHtml);
- // 右侧浮动导航
- floatNavs = [];
- $('.apipost-doc-wrap').find('h3 ,h4, h5, h6, h7').each((i, item) => {
- let text = $(item).attr('data-text');
- let id = $(item).attr('id');
- if (text) {
- floatNavs.push({
- text, id,
- name: $(item).prop("tagName"),
- indent: $(item).prop("tagName").replace(/[^0-9]/ig, "") - 2,
- })
- }
- })
- const _floatNavs = template('apipost-float-nav-template-tpl', {
- list: floatNavs
- });
- $('.apipost-float-nav-template').html(_floatNavs);
- // 请求body raw 参数
- try {
- if (_targetData.target_type == 'grpc' || _targetData.example_type == 'grpc') {
- $('.request-body-raw-editor-json').each((i, item) => {
- let val = $(item).prev('input').val();
- if(val){
- new JsonEditor(
- `#${$(item).attr('id')}`,
- JSON5.parse(val),
- {},
- []
- ).load(JSON5.parse(val), []);
- }
- })
- }
- if (_targetData.target_type == 'api' || _targetData.example_type == 'api') {
- let obj = [];
- if (_.has(_targetData, 'request.body.raw_para')) {
- obj = _targetData.request.body.raw_para.map((itemRaw) => {
- const arr = itemRaw.key.split('.');
- itemRaw.newKey = arr[arr.length - 1];
- return itemRaw;
- });
- }
- if($('#request-body-raw-editor-input').length > 0){
- new JsonEditor('#request-body-raw-editor-json',
- JSON5.parse($('#request-body-raw-editor-input').val()),
- {},
- obj
- ).load(JSON5.parse($('#request-body-raw-editor-input').val()), obj);
- }
- }
- } catch (e) { }
- // 响应示例 raw 参数
- try {
- _.forEach(_targetData.response, function (item, key) {
- const obj = item.parameter.map((itemRaw) => {
- const arr = itemRaw.key.split('.');
- itemRaw.newKey = arr[arr.length - 1];
- return itemRaw;
- });
- if($(`#response-raw-${key}-json-input`).length > 0){
- new JsonEditor(`#response-raw-${key}-json`,
- JSON5.parse($(`#response-raw-${key}-json-input`).val()),
- {},
- obj
- ).load(JSON5.parse($(`#response-raw-${key}-json-input`).val()), obj);
- }
- });
- } catch (e) { }
- // 更新 url
- changeURLStatic('target_id', _target_id);
- }
- // 优化 apipost-doc-paras 展示
- $('.apipost-doc-paras').each((i, item) => {
- if ($(item).children().length == 0) {
- let _id = $(item).attr('for-id');
- let _title = $(`#${_id}`).attr('data-text');
- let _tipDiv = `<div class="apipost-no-data">暂无${_title}数据</div>`;
- $(item).append(_tipDiv)
- }
- })
- })
- }
- // 折叠导航(移动端)
- $('.apipost-doc-body-nav,.apipost-doc-body-content').removeClass('open');
- $(document).on('scroll', function (e) {
- let currentNav= '';
- let scrollTop = $(document).scrollTop();
- floatNavs.forEach(item => {
- if ($(`#${item.id}`).offset()) {
- if ($(`#${item.id}`).offset().top > scrollTop && currentNav == '') {
- currentNav = item.id
- // console.log(currentNav)
- $('.apipost-float-nav-template').find(`li[data-id="${currentNav}"]`).addClass('active').siblings().removeClass('active');
- }
- }
- })
- // console.log('请求参数:', $('#请求参数').offset().top, scrollTop)
- }).on('click', '.apipost-float-nav-template li', function(){
- $(this).addClass('active').siblings().removeClass('active');
- });
- }
- // 初始化左侧导航列表
- const _leftNavHtml = template('apipost-left-nav-template-tpl', {
- list: apipostData.children,
- target_id: _target_id,
- });
- $('.apipost-left-nav-template').html(_leftNavHtml);
- // 初始化项目公共信息
- $('title').text(`${apipostData.project_name} - Powered by Apipost V7`);
- $('.apipost-doc-body-nav-title').text(`${apipostData.project_name}`);
- // project-logo
- if (_.has(apipostData, 'project_logo') && apipostData.project_logo != '') {
- $('.project-logo').attr('src', apipostData.project_logo);
- }
- $('.project-logo').on('error', function () {
- $('.project-logo').attr('src', 'https://img.cdn.apipost.cn/docs/images7/logo.svg');
- });
- // consoleLog(apipostData)
- // 复制按钮
- const clipboard = new ClipboardJS('.copy-clipboard');
- clipboard.on('success', function (e) {
- $('.copy-clipboard-success').remove();
- $(e.trigger).append('<i class="copy-clipboard-success">复制成功</i>');
- e.clearSelection();
- $('.copy-clipboard-success').fadeOut(1000);
- setTimeout(function () {
- $('.copy-clipboard-success').remove();
- }, 1500);
- });
- clipboard.on('error', function (e) { });
- // 优化左侧菜单展示,默认收起
- // 获取当前的父ID
- let _target_parent_ids = getParentTargetIDs(Object.values(dataDB), _target_id);
- $('.apipost-left-nav-template').children('li').each((i, item) => {
- if ($(item).attr('data-type') == 'folder') {
- if (_target_parent_ids.indexOf($(item).attr('data-target_id')) == -1) {
- $(item).addClass('toggle');
- } else {
- $(item).removeClass('toggle');
- }
- }
- //if($(item).attr('data-type') != 'example') {
- if ($(item).attr('data-parent_id') != '0' && _target_parent_ids.indexOf($(item).attr('data-target_id')) == -1 && $(item).attr('data-target_id') != _target_id) {
- $(item).addClass('is-hidden');
- } else {
- $(item).removeClass('is-hidden');
- }
- //}
- })
- // 同级展示
- if (dataDB[_target_id]) {
- // $('.apipost-left-nav-template').children(`li[data-parent_id="${dataDB[_target_id].parent_id}"]`).removeClass('is-hidden');
- _target_parent_ids.forEach(_parent_id => {
- $('.apipost-left-nav-template').children(`li[data-parent_id="${_parent_id}"]`).removeClass('is-hidden');
- })
- }
- // alert(dataDB)
- // 加载单接口信息
- loadData(_target_id, dataDB);
- // 绑定事件
- $(document).on('click', '.mobile-nav-toggle-link-btn', function () { // 移动端导航
- $('.apipost-doc-body-nav,.apipost-doc-body-content').addClass('open');
- }).on('click', '.load-data-btn', function () { // 加载数据
- let target_id = $(this).attr('data-target_id');
- // let parent_id = $(this).attr('data-parent_id');
- // let target_type = $(this).attr('data-type');
- // let indent = $(this).attr('data-indent');
- // 加载单条数据
- loadData(target_id, dataDB);
- }).on('click', '.export-download-btn', function () { // 导出文档
- $(this).next('ul').toggleClass('is-hidden');
- })
- } else {
- // 空数据
- // consoleLog('null')
- }
- </script>
- <script>
- var _hmt = _hmt || [];
- (function () {
- var hm = document.createElement("script");
- hm.src = "https://hm.baidu.com/hm.js?a046ce178828e393614822a297b8d296";
- var s = document.getElementsByTagName("script")[0];
- s.parentNode.insertBefore(hm, s);
- })();
- </script>
- </body>
- </html>
|