559 lines
36 KiB
HTML
559 lines
36 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>发型更换H5项目 - API文档</title>
|
||
<style>
|
||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||
body {
|
||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang SC", "Microsoft YaHei", sans-serif;
|
||
background: #f7f8fa;
|
||
color: #333;
|
||
line-height: 1.7;
|
||
}
|
||
|
||
/* 侧边栏 */
|
||
.sidebar {
|
||
position: fixed;
|
||
top: 0; left: 0;
|
||
width: 260px;
|
||
height: 100vh;
|
||
background: #fff;
|
||
border-right: 1px solid #e8e8e8;
|
||
overflow-y: auto;
|
||
padding: 24px 0;
|
||
z-index: 100;
|
||
}
|
||
.sidebar-title {
|
||
padding: 0 20px 16px;
|
||
font-size: 16px;
|
||
font-weight: 700;
|
||
color: #4A90E2;
|
||
border-bottom: 1px solid #f0f0f0;
|
||
margin-bottom: 12px;
|
||
}
|
||
.sidebar a {
|
||
display: block;
|
||
padding: 6px 20px;
|
||
color: #555;
|
||
text-decoration: none;
|
||
font-size: 14px;
|
||
transition: all .2s;
|
||
}
|
||
.sidebar a:hover, .sidebar a.active {
|
||
color: #4A90E2;
|
||
background: #f0f7ff;
|
||
}
|
||
.sidebar a.level-2 { padding-left: 36px; font-size: 13px; color: #888; }
|
||
|
||
/* 主内容 */
|
||
.main {
|
||
margin-left: 260px;
|
||
padding: 32px 48px 80px;
|
||
max-width: 960px;
|
||
}
|
||
h1 {
|
||
font-size: 28px;
|
||
margin-bottom: 8px;
|
||
color: #1a1a1a;
|
||
}
|
||
.version-badge {
|
||
display: inline-block;
|
||
background: #4A90E2;
|
||
color: #fff;
|
||
padding: 2px 10px;
|
||
border-radius: 12px;
|
||
font-size: 12px;
|
||
margin-bottom: 24px;
|
||
}
|
||
h2 {
|
||
font-size: 22px;
|
||
margin: 40px 0 16px;
|
||
padding-bottom: 8px;
|
||
border-bottom: 2px solid #4A90E2;
|
||
color: #1a1a1a;
|
||
}
|
||
h3 {
|
||
font-size: 18px;
|
||
margin: 28px 0 12px;
|
||
color: #333;
|
||
}
|
||
h4 {
|
||
font-size: 15px;
|
||
margin: 20px 0 8px;
|
||
color: #555;
|
||
}
|
||
p, li { font-size: 14px; }
|
||
p { margin-bottom: 10px; }
|
||
ul { padding-left: 20px; margin-bottom: 12px; }
|
||
li { margin-bottom: 4px; }
|
||
|
||
/* 信息卡片 */
|
||
.info-card {
|
||
background: #fff;
|
||
border: 1px solid #e8e8e8;
|
||
border-radius: 8px;
|
||
padding: 16px 20px;
|
||
margin-bottom: 16px;
|
||
}
|
||
.info-card .label { color: #888; font-size: 13px; }
|
||
.info-card .value { font-weight: 600; }
|
||
|
||
/* 表格 */
|
||
table {
|
||
width: 100%;
|
||
border-collapse: collapse;
|
||
margin: 12px 0 20px;
|
||
font-size: 14px;
|
||
background: #fff;
|
||
border-radius: 8px;
|
||
overflow: hidden;
|
||
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
|
||
}
|
||
th {
|
||
background: #f5f7fa;
|
||
font-weight: 600;
|
||
text-align: left;
|
||
padding: 10px 14px;
|
||
border-bottom: 2px solid #e8e8e8;
|
||
white-space: nowrap;
|
||
}
|
||
td {
|
||
padding: 10px 14px;
|
||
border-bottom: 1px solid #f0f0f0;
|
||
}
|
||
tr:last-child td { border-bottom: none; }
|
||
tr:hover td { background: #fafbfc; }
|
||
|
||
/* 代码块 */
|
||
pre {
|
||
background: #1e1e2e;
|
||
color: #cdd6f4;
|
||
padding: 16px 20px;
|
||
border-radius: 8px;
|
||
overflow-x: auto;
|
||
margin: 10px 0 16px;
|
||
font-size: 13px;
|
||
line-height: 1.6;
|
||
}
|
||
code {
|
||
font-family: "JetBrains Mono", "Fira Code", "SF Mono", Menlo, Consolas, monospace;
|
||
}
|
||
:not(pre) > code {
|
||
background: #f0f2f5;
|
||
padding: 2px 6px;
|
||
border-radius: 4px;
|
||
font-size: 13px;
|
||
color: #d63384;
|
||
}
|
||
|
||
/* JSON 语法高亮 */
|
||
.json-key { color: #89b4fa; }
|
||
.json-string { color: #a6e3a1; }
|
||
.json-bool, .json-null { color: #fab387; }
|
||
.json-number { color: #f9e2af; }
|
||
.json-bracket { color: #cdd6f4; }
|
||
|
||
/* 方法标签 */
|
||
.method {
|
||
display: inline-block;
|
||
padding: 2px 10px;
|
||
border-radius: 4px;
|
||
font-size: 12px;
|
||
font-weight: 700;
|
||
color: #fff;
|
||
font-family: monospace;
|
||
}
|
||
.method-get { background: #22c55e; }
|
||
.method-post { background: #3b82f6; }
|
||
|
||
/* 接口卡片 */
|
||
.endpoint-card {
|
||
background: #fff;
|
||
border: 1px solid #e8e8e8;
|
||
border-radius: 8px;
|
||
padding: 20px 24px;
|
||
margin: 16px 0;
|
||
}
|
||
.endpoint-path {
|
||
font-family: monospace;
|
||
font-size: 15px;
|
||
font-weight: 600;
|
||
color: #1a1a1a;
|
||
margin-left: 8px;
|
||
}
|
||
|
||
/* 必填标签 */
|
||
.required {
|
||
color: #ef4444;
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
}
|
||
|
||
/* 备注块 */
|
||
.note {
|
||
background: #fff7ed;
|
||
border-left: 4px solid #f59e0b;
|
||
padding: 12px 16px;
|
||
border-radius: 0 8px 8px 0;
|
||
margin: 12px 0;
|
||
font-size: 13px;
|
||
}
|
||
.note-title { font-weight: 700; color: #d97706; margin-bottom: 4px; }
|
||
|
||
/* 版本历史表格 */
|
||
.version-table td:first-child { font-weight: 600; color: #4A90E2; }
|
||
|
||
/* 响应式 */
|
||
@media (max-width: 768px) {
|
||
.sidebar { display: none; }
|
||
.main { margin-left: 0; padding: 20px 16px; }
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<!-- 侧边栏导航 -->
|
||
<nav class="sidebar">
|
||
<div class="sidebar-title">API 文档导航</div>
|
||
<a href="#section1">1. 文档说明</a>
|
||
<a href="#section1-1" class="level-2">基本信息</a>
|
||
<a href="#section2">2. 响应格式</a>
|
||
<a href="#section3">3. 接口列表总览</a>
|
||
<a href="#section4">4. 详细接口说明</a>
|
||
<a href="#section4-1" class="level-2">4.1 获取发型列表</a>
|
||
<a href="#section4-2" class="level-2">4.2 更换发型</a>
|
||
<a href="#section4-3" class="level-2">4.3 更换头发颜色</a>
|
||
<a href="#section5">5. 错误处理</a>
|
||
<a href="#section6">6. API变更流程</a>
|
||
<a href="#section7">7. 附录</a>
|
||
<a href="#section7-2" class="level-2">支持的图片格式</a>
|
||
<a href="#section7-images" class="level-2">发型预览图链接</a>
|
||
</nav>
|
||
|
||
<!-- 主内容 -->
|
||
<div class="main">
|
||
|
||
<h1>发型更换H5项目 API 文档</h1>
|
||
<span class="version-badge">v1.3 · 2026-08-10</span>
|
||
|
||
<!-- 1. 文档说明 -->
|
||
<h2 id="section1">1. 文档说明</h2>
|
||
<p>本文档描述了发型更换H5项目的API接口规范,所有前后端交互都应遵循此文档。任何API变更都应先修改此文档,然后再进行代码实现。</p>
|
||
|
||
<h4>版本历史</h4>
|
||
<table class="version-table">
|
||
<tr><th>版本</th><th>日期</th><th>描述</th><th>作者</th></tr>
|
||
<tr><td>v1.0</td><td>2026-01-18</td><td>初始版本</td><td>系统生成</td></tr>
|
||
<tr><td>v1.1</td><td>2026-02-10</td><td>补充发色更换接口,修正数据格式</td><td>系统更新</td></tr>
|
||
<tr><td>v1.2</td><td>2026-08-10</td><td>生产域名 /hair 前缀;发型预览图改为本机静态路径</td><td>系统更新</td></tr>
|
||
<tr><td>v1.3</td><td>2026-08-10</td><td>补充全部发型预览图完整链接;分辨率更新为 634×950</td><td>系统更新</td></tr>
|
||
</table>
|
||
|
||
<h3 id="section1-1">基本信息</h3>
|
||
<div class="info-card">
|
||
<ul>
|
||
<li><span class="label">生产域名:</span><code>https://meida.xiangsilian.com</code></li>
|
||
<li><span class="label">H5 页面:</span><code>https://meida.xiangsilian.com/hair/</code></li>
|
||
<li><span class="label">API基础路径(对外):</span><code>/hair/api</code></li>
|
||
<li><span class="label">完整 API 前缀:</span><code>https://meida.xiangsilian.com/hair/api</code></li>
|
||
<li><span class="label">后端内部监听:</span><span class="value">127.0.0.1:5000</span>(Gunicorn,经 Nginx 反代)</li>
|
||
<li><span class="label">响应格式:</span>JSON</li>
|
||
<li><span class="label">字符编码:</span>UTF-8</li>
|
||
<li><span class="label">认证方式:</span>无需认证</li>
|
||
</ul>
|
||
<p style="margin-top:12px;font-size:13px;color:#666;">接入方请使用对外路径 <code>/hair/api/...</code>。直连本机 5000 端口时可用 <code>/api/...</code>(仅限服务器本机调试)。</p>
|
||
</div>
|
||
|
||
<!-- 2. 响应格式 -->
|
||
<h2 id="section2">2. 响应格式</h2>
|
||
|
||
<h4>成功响应</h4>
|
||
<pre><code>{
|
||
<span class="json-key">"success"</span>: <span class="json-bool">true</span>,
|
||
<span class="json-key">"data"</span>: <span class="json-bracket">{ ... }</span>
|
||
}</code></pre>
|
||
|
||
<h4>失败响应</h4>
|
||
<pre><code>{
|
||
<span class="json-key">"success"</span>: <span class="json-bool">false</span>,
|
||
<span class="json-key">"message"</span>: <span class="json-string">"错误信息"</span>
|
||
}</code></pre>
|
||
|
||
<!-- 3. 接口列表 -->
|
||
<h2 id="section3">3. 接口列表总览</h2>
|
||
<table>
|
||
<tr><th>接口路径</th><th>方法</th><th>功能描述</th></tr>
|
||
<tr>
|
||
<td><code>/hair/api/hairstyles</code></td>
|
||
<td><span class="method method-get">GET</span></td>
|
||
<td>获取发型列表</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>/hair/api/change-hair</code></td>
|
||
<td><span class="method method-post">POST</span></td>
|
||
<td>更换发型</td>
|
||
</tr>
|
||
<tr>
|
||
<td><code>/hair/api/change-hair-color</code></td>
|
||
<td><span class="method method-post">POST</span></td>
|
||
<td>更换头发颜色</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<!-- 4. 详细接口说明 -->
|
||
<h2 id="section4">4. 详细接口说明</h2>
|
||
|
||
<!-- 4.1 获取发型列表 -->
|
||
<h3 id="section4-1">4.1 获取发型列表</h3>
|
||
<div class="endpoint-card">
|
||
<span class="method method-get">GET</span>
|
||
<span class="endpoint-path">/hair/api/hairstyles</span>
|
||
</div>
|
||
|
||
<h4>请求参数</h4>
|
||
<p>无</p>
|
||
<p>示例:<code>GET https://meida.xiangsilian.com/hair/api/hairstyles</code></p>
|
||
|
||
<h4>响应示例</h4>
|
||
<pre><code>{
|
||
<span class="json-key">"success"</span>: <span class="json-bool">true</span>,
|
||
<span class="json-key">"data"</span>: {
|
||
<span class="json-key">"hairstyles"</span>: [
|
||
{
|
||
<span class="json-key">"id"</span>: <span class="json-string">"1953267161121464322"</span>,
|
||
<span class="json-key">"name"</span>: <span class="json-string">"发型4322"</span>,
|
||
<span class="json-key">"image_url"</span>: <span class="json-string">"/hair/images/hairstyles/1953267161121464322.jpg"</span>
|
||
},
|
||
{
|
||
<span class="json-key">"id"</span>: <span class="json-string">"1953267288284372994"</span>,
|
||
<span class="json-key">"name"</span>: <span class="json-string">"发型2994"</span>,
|
||
<span class="json-key">"image_url"</span>: <span class="json-string">"/hair/images/hairstyles/1953267288284372994.jpg"</span>
|
||
}
|
||
]
|
||
}
|
||
}</code></pre>
|
||
|
||
<h4>字段说明</h4>
|
||
<table>
|
||
<tr><th>字段名</th><th>类型</th><th>描述</th></tr>
|
||
<tr><td><code>id</code></td><td>String</td><td>发型唯一标识符(长数字串,来源于 hairId2url.txt)</td></tr>
|
||
<tr><td><code>name</code></td><td>String</td><td>发型名称(格式:"发型" + ID后4位)</td></tr>
|
||
<tr><td><code>image_url</code></td><td>String</td><td>发型预览图本机相对路径,完整访问为 <code>https://meida.xiangsilian.com</code> + <code>image_url</code></td></tr>
|
||
</table>
|
||
<p>图片存放在服务器 <code>frontend/images/hairstyles/</code>,分辨率 <strong>634 × 950</strong>(原图 60%)。完整链接见 <a href="#section7-images">7.2</a>。</p>
|
||
|
||
<!-- 4.2 更换发型 -->
|
||
<h3 id="section4-2">4.2 更换发型</h3>
|
||
<div class="endpoint-card">
|
||
<span class="method method-post">POST</span>
|
||
<span class="endpoint-path">/hair/api/change-hair</span>
|
||
</div>
|
||
|
||
<h4>请求参数 <code>multipart/form-data</code></h4>
|
||
<table>
|
||
<tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr>
|
||
<tr><td><code>image</code></td><td>File</td><td><span class="required">是</span></td><td>用户上传的图片文件(支持 png/jpg/jpeg/gif,最大 16MB)</td></tr>
|
||
<tr><td><code>hairstyle_id</code></td><td>String</td><td><span class="required">是</span></td><td>要更换的发型ID</td></tr>
|
||
</table>
|
||
|
||
<h4>响应示例</h4>
|
||
<pre><code>{
|
||
<span class="json-key">"success"</span>: <span class="json-bool">true</span>,
|
||
<span class="json-key">"data"</span>: {
|
||
<span class="json-key">"result_image"</span>: <span class="json-string">"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."</span>
|
||
}
|
||
}</code></pre>
|
||
|
||
<h4>响应字段</h4>
|
||
<table>
|
||
<tr><th>字段名</th><th>类型</th><th>描述</th></tr>
|
||
<tr><td><code>result_image</code></td><td>String</td><td>发型更换后的图片,Base64 Data URL 格式</td></tr>
|
||
</table>
|
||
|
||
<div class="note">
|
||
<div class="note-title">注意事项</div>
|
||
<ul>
|
||
<li>远程 AI 处理耗时较长,超时时间为 <strong>120 秒</strong></li>
|
||
<li>如果远程 API 调用失败,会返回原始图片作为降级处理</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<!-- 4.3 更换头发颜色 -->
|
||
<h3 id="section4-3">4.3 更换头发颜色</h3>
|
||
<div class="endpoint-card">
|
||
<span class="method method-post">POST</span>
|
||
<span class="endpoint-path">/hair/api/change-hair-color</span>
|
||
</div>
|
||
|
||
<h4>请求参数 <code>multipart/form-data</code></h4>
|
||
<table>
|
||
<tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr>
|
||
<tr><td><code>image</code></td><td>File</td><td><span class="required">是</span></td><td>用户上传的图片文件(支持 png/jpg/jpeg/gif,最大 16MB)</td></tr>
|
||
<tr><td><code>rgb</code></td><td>String</td><td><span class="required">是</span></td><td>RGB颜色值,格式为 <code>"[R, G, B]"</code>,例如 <code>"[255, 106, 0]"</code></td></tr>
|
||
<tr><td><code>ratio</code></td><td>String</td><td><span class="required">是</span></td><td>颜色替换强度,范围 0.0 ~ 1.0,例如 <code>"0.9"</code></td></tr>
|
||
</table>
|
||
|
||
<h4>响应示例</h4>
|
||
<pre><code>{
|
||
<span class="json-key">"success"</span>: <span class="json-bool">true</span>,
|
||
<span class="json-key">"data"</span>: {
|
||
<span class="json-key">"result_image"</span>: <span class="json-string">"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."</span>
|
||
}
|
||
}</code></pre>
|
||
|
||
<h4>响应字段</h4>
|
||
<table>
|
||
<tr><th>字段名</th><th>类型</th><th>描述</th></tr>
|
||
<tr><td><code>result_image</code></td><td>String</td><td>发色更换后的图片,Base64 Data URL 格式</td></tr>
|
||
</table>
|
||
|
||
<div class="note">
|
||
<div class="note-title">注意事项</div>
|
||
<ul>
|
||
<li>远程 AI 处理耗时较长,超时时间为 <strong>120 秒</strong></li>
|
||
<li>如果远程 API 调用失败,会返回原始图片作为降级处理</li>
|
||
<li><code>ratio</code> 值越大,颜色替换效果越明显</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<!-- 5. 错误处理 -->
|
||
<h2 id="section5">5. 错误处理</h2>
|
||
|
||
<h4>错误响应格式</h4>
|
||
<pre><code>{
|
||
<span class="json-key">"success"</span>: <span class="json-bool">false</span>,
|
||
<span class="json-key">"message"</span>: <span class="json-string">"请上传图片"</span>
|
||
}</code></pre>
|
||
|
||
<h4>错误状态码列表</h4>
|
||
<table>
|
||
<tr><th>状态码</th><th>接口</th><th>触发条件</th><th>错误消息</th></tr>
|
||
<tr><td>400</td><td><code>/hair/api/change-hair</code></td><td>缺少图片</td><td>请上传图片</td></tr>
|
||
<tr><td>400</td><td><code>/hair/api/change-hair</code></td><td>缺少发型ID</td><td>请选择发型</td></tr>
|
||
<tr><td>400</td><td><code>/hair/api/change-hair</code></td><td>文件类型不合法</td><td>不支持的文件类型,请上传图片文件</td></tr>
|
||
<tr><td>400</td><td><code>/hair/api/change-hair-color</code></td><td>缺少图片</td><td>请上传图片</td></tr>
|
||
<tr><td>400</td><td><code>/hair/api/change-hair-color</code></td><td>缺少颜色值</td><td>请选择颜色</td></tr>
|
||
<tr><td>400</td><td><code>/hair/api/change-hair-color</code></td><td>缺少替换比例</td><td>请设置更换比例</td></tr>
|
||
<tr><td>400</td><td><code>/hair/api/change-hair-color</code></td><td>文件类型不合法</td><td>不支持的文件类型,请上传图片文件</td></tr>
|
||
<tr><td>500</td><td><code>/hair/api/hairstyles</code></td><td>服务器内部错误</td><td>获取发型列表失败: [错误信息]</td></tr>
|
||
<tr><td>500</td><td><code>/hair/api/change-hair</code></td><td>处理失败</td><td>处理图片失败: [错误信息]</td></tr>
|
||
<tr><td>500</td><td><code>/hair/api/change-hair-color</code></td><td>处理失败</td><td>处理图片失败: [错误信息]</td></tr>
|
||
</table>
|
||
|
||
<!-- 6. API变更流程 -->
|
||
<h2 id="section6">6. API 变更流程</h2>
|
||
<div class="info-card">
|
||
<ol>
|
||
<li><strong>文档修改</strong> — 先修改本 API 文档,记录变更内容、原因和影响范围</li>
|
||
<li><strong>代码实现</strong> — 根据文档修改后端 API 实现</li>
|
||
<li><strong>前端适配</strong> — 前端根据文档修改进行适配</li>
|
||
<li><strong>测试验证</strong> — 测试新 API 的功能和兼容性</li>
|
||
<li><strong>部署上线</strong> — 按计划部署变更</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<!-- 7. 附录 -->
|
||
<h2 id="section7">7. 附录</h2>
|
||
|
||
<h3 id="section7-2">7.1 支持的图片格式</h3>
|
||
<table>
|
||
<tr><th>格式</th><th>MIME 类型</th><th>扩展名</th></tr>
|
||
<tr><td>PNG</td><td>image/png</td><td>.png</td></tr>
|
||
<tr><td>JPEG</td><td>image/jpeg</td><td>.jpg / .jpeg</td></tr>
|
||
<tr><td>GIF</td><td>image/gif</td><td>.gif</td></tr>
|
||
</table>
|
||
<p>文件大小限制:<strong>16MB</strong></p>
|
||
|
||
<h3 id="section7-images">7.2 发型预览图完整链接(本机)</h3>
|
||
<div class="info-card">
|
||
<ul>
|
||
<li><span class="label">分辨率:</span><span class="value">634 × 950</span>(原图 1056 × 1584 的 60%)</li>
|
||
<li><span class="label">目录:</span><code>frontend/images/hairstyles/</code></li>
|
||
<li><span class="label">URL 规则:</span><code>https://meida.xiangsilian.com/hair/images/hairstyles/{id}.jpg</code></li>
|
||
<li><span class="label">数量:</span><span class="value">60</span></li>
|
||
</ul>
|
||
</div>
|
||
<table>
|
||
<tr><th>发型 ID</th><th>名称</th><th>完整链接</th></tr>
|
||
<tr><td><code>1953267161121464322</code></td><td>发型4322</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1953267161121464322.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1953267161121464322.jpg</a></td></tr>
|
||
<tr><td><code>1953267288284372994</code></td><td>发型2994</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1953267288284372994.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1953267288284372994.jpg</a></td></tr>
|
||
<tr><td><code>1953270523594317826</code></td><td>发型7826</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1953270523594317826.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1953270523594317826.jpg</a></td></tr>
|
||
<tr><td><code>1953270724765720577</code></td><td>发型0577</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1953270724765720577.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1953270724765720577.jpg</a></td></tr>
|
||
<tr><td><code>1953271922151432194</code></td><td>发型2194</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1953271922151432194.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1953271922151432194.jpg</a></td></tr>
|
||
<tr><td><code>1953272913265467394</code></td><td>发型7394</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1953272913265467394.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1953272913265467394.jpg</a></td></tr>
|
||
<tr><td><code>1953288800932503554</code></td><td>发型3554</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1953288800932503554.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1953288800932503554.jpg</a></td></tr>
|
||
<tr><td><code>1954536242109784066</code></td><td>发型4066</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954536242109784066.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954536242109784066.jpg</a></td></tr>
|
||
<tr><td><code>1954536297776586754</code></td><td>发型6754</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954536297776586754.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954536297776586754.jpg</a></td></tr>
|
||
<tr><td><code>1954536402516746241</code></td><td>发型6241</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954536402516746241.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954536402516746241.jpg</a></td></tr>
|
||
<tr><td><code>1954536893304840194</code></td><td>发型0194</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954536893304840194.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954536893304840194.jpg</a></td></tr>
|
||
<tr><td><code>1954536956919848962</code></td><td>发型8962</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954536956919848962.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954536956919848962.jpg</a></td></tr>
|
||
<tr><td><code>1954537022875279362</code></td><td>发型9362</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954537022875279362.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954537022875279362.jpg</a></td></tr>
|
||
<tr><td><code>1954537085882114050</code></td><td>发型4050</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954537085882114050.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954537085882114050.jpg</a></td></tr>
|
||
<tr><td><code>1954537191729569793</code></td><td>发型9793</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954537191729569793.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954537191729569793.jpg</a></td></tr>
|
||
<tr><td><code>1954537709436706817</code></td><td>发型6817</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954537709436706817.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954537709436706817.jpg</a></td></tr>
|
||
<tr><td><code>1954537743532204034</code></td><td>发型4034</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954537743532204034.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954537743532204034.jpg</a></td></tr>
|
||
<tr><td><code>1954537961069780994</code></td><td>发型0994</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954537961069780994.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954537961069780994.jpg</a></td></tr>
|
||
<tr><td><code>1954538119216013313</code></td><td>发型3313</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954538119216013313.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954538119216013313.jpg</a></td></tr>
|
||
<tr><td><code>1954538156499181569</code></td><td>发型1569</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954538156499181569.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954538156499181569.jpg</a></td></tr>
|
||
<tr><td><code>1954538259330932738</code></td><td>发型2738</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954538259330932738.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954538259330932738.jpg</a></td></tr>
|
||
<tr><td><code>1954538335306555393</code></td><td>发型5393</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1954538335306555393.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1954538335306555393.jpg</a></td></tr>
|
||
<tr><td><code>1980312945301954561</code></td><td>发型4561</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980312945301954561.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980312945301954561.jpg</a></td></tr>
|
||
<tr><td><code>1980313052302843905</code></td><td>发型3905</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980313052302843905.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980313052302843905.jpg</a></td></tr>
|
||
<tr><td><code>1980313166576656385</code></td><td>发型6385</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980313166576656385.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980313166576656385.jpg</a></td></tr>
|
||
<tr><td><code>1980313210109337601</code></td><td>发型7601</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980313210109337601.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980313210109337601.jpg</a></td></tr>
|
||
<tr><td><code>1980313433502162946</code></td><td>发型2946</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980313433502162946.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980313433502162946.jpg</a></td></tr>
|
||
<tr><td><code>1980313576506957825</code></td><td>发型7825</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980313576506957825.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980313576506957825.jpg</a></td></tr>
|
||
<tr><td><code>1980313740403580930</code></td><td>发型0930</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980313740403580930.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980313740403580930.jpg</a></td></tr>
|
||
<tr><td><code>1980313819915001858</code></td><td>发型1858</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980313819915001858.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980313819915001858.jpg</a></td></tr>
|
||
<tr><td><code>1980314032369082369</code></td><td>发型2369</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980314032369082369.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980314032369082369.jpg</a></td></tr>
|
||
<tr><td><code>1980314209322573825</code></td><td>发型3825</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980314209322573825.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980314209322573825.jpg</a></td></tr>
|
||
<tr><td><code>1980314290419441665</code></td><td>发型1665</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980314290419441665.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980314290419441665.jpg</a></td></tr>
|
||
<tr><td><code>1980314381058351106</code></td><td>发型1106</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980314381058351106.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980314381058351106.jpg</a></td></tr>
|
||
<tr><td><code>1980314477720281090</code></td><td>发型1090</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980314477720281090.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980314477720281090.jpg</a></td></tr>
|
||
<tr><td><code>1980314710101499906</code></td><td>发型9906</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980314710101499906.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980314710101499906.jpg</a></td></tr>
|
||
<tr><td><code>1980314764421931009</code></td><td>发型1009</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980314764421931009.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980314764421931009.jpg</a></td></tr>
|
||
<tr><td><code>1980314868713299969</code></td><td>发型9969</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980314868713299969.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980314868713299969.jpg</a></td></tr>
|
||
<tr><td><code>1980315179934851074</code></td><td>发型1074</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980315179934851074.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980315179934851074.jpg</a></td></tr>
|
||
<tr><td><code>1980315238260842497</code></td><td>发型2497</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980315238260842497.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980315238260842497.jpg</a></td></tr>
|
||
<tr><td><code>1980361636742209537</code></td><td>发型9537</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980361636742209537.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980361636742209537.jpg</a></td></tr>
|
||
<tr><td><code>1980367742952579074</code></td><td>发型9074</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980367742952579074.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980367742952579074.jpg</a></td></tr>
|
||
<tr><td><code>1980367781510815746</code></td><td>发型5746</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980367781510815746.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980367781510815746.jpg</a></td></tr>
|
||
<tr><td><code>1980367800787836929</code></td><td>发型6929</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980367800787836929.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980367800787836929.jpg</a></td></tr>
|
||
<tr><td><code>1980367852847538177</code></td><td>发型8177</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980367852847538177.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980367852847538177.jpg</a></td></tr>
|
||
<tr><td><code>1980367968627105793</code></td><td>发型5793</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980367968627105793.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980367968627105793.jpg</a></td></tr>
|
||
<tr><td><code>1980368109866098690</code></td><td>发型8690</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980368109866098690.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980368109866098690.jpg</a></td></tr>
|
||
<tr><td><code>1980368205752082434</code></td><td>发型2434</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980368205752082434.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980368205752082434.jpg</a></td></tr>
|
||
<tr><td><code>1980368368847593473</code></td><td>发型3473</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980368368847593473.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980368368847593473.jpg</a></td></tr>
|
||
<tr><td><code>1980368465631158274</code></td><td>发型8274</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980368465631158274.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980368465631158274.jpg</a></td></tr>
|
||
<tr><td><code>1980368588293578754</code></td><td>发型8754</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980368588293578754.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980368588293578754.jpg</a></td></tr>
|
||
<tr><td><code>1980413320612847618</code></td><td>发型7618</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980413320612847618.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980413320612847618.jpg</a></td></tr>
|
||
<tr><td><code>1980415346071609345</code></td><td>发型9345</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980415346071609345.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980415346071609345.jpg</a></td></tr>
|
||
<tr><td><code>1980415897056354306</code></td><td>发型4306</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1980415897056354306.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1980415897056354306.jpg</a></td></tr>
|
||
<tr><td><code>1981177324700549122</code></td><td>发型9122</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1981177324700549122.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1981177324700549122.jpg</a></td></tr>
|
||
<tr><td><code>1981177378714796034</code></td><td>发型6034</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1981177378714796034.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1981177378714796034.jpg</a></td></tr>
|
||
<tr><td><code>1981177477423546370</code></td><td>发型6370</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1981177477423546370.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1981177477423546370.jpg</a></td></tr>
|
||
<tr><td><code>1981177594750812162</code></td><td>发型2162</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1981177594750812162.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1981177594750812162.jpg</a></td></tr>
|
||
<tr><td><code>1981177742742634497</code></td><td>发型4497</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1981177742742634497.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1981177742742634497.jpg</a></td></tr>
|
||
<tr><td><code>1981177931859607554</code></td><td>发型7554</td><td><a href="https://meida.xiangsilian.com/hair/images/hairstyles/1981177931859607554.jpg" target="_blank" rel="noopener">https://meida.xiangsilian.com/hair/images/hairstyles/1981177931859607554.jpg</a></td></tr>
|
||
</table>
|
||
|
||
|
||
<h3>7.2 开发工具推荐</h3>
|
||
<div class="info-card">
|
||
<ul>
|
||
<li><strong>API 测试</strong>:Postman、Insomnia</li>
|
||
<li><strong>文档生成</strong>:Swagger、ReDoc</li>
|
||
<li><strong>代码生成</strong>:OpenAPI Generator</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div style="margin-top: 60px; padding-top: 20px; border-top: 1px solid #e8e8e8; color: #aaa; font-size: 12px; text-align: center;">
|
||
发型更换H5项目 API 文档 · v1.3 · 最后更新 2026-08-10
|
||
</div>
|
||
</div>
|
||
|
||
</body>
|
||
</html>
|