Skip to content

Commit 2ba7c48

Browse files
pythonHuangclaude
andcommitted
feat: 接口智能接入助手增加Header配置生成-提示词要求为接口设计headerParams(鉴权头等),预览展开行三段展示(入参/Header/出参配置),确认接入写入参数表(paramType4)+修复required数字类型long/int兼容
Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 3c38688 commit 2ba7c48

2 files changed

Lines changed: 36 additions & 19 deletions

File tree

‎Juggle.Application/Services/Impl/AiService.cs‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,9 @@ 只输出 JSON(不要 markdown 围栏、不要解释),结构如下:
206206
"inputParams": [ // 接口入参
207207
{ "paramCode": "userId", "paramName": "用户id", "paramType": "string", "paramPosition": "body", "required": 1, "description": "用户唯一标识" }
208208
],
209+
"headerParams": [ // 接口 Header 配置(鉴权/内容类型等)
210+
{ "paramCode": "Authorization", "paramName": "授权令牌", "paramType": "string", "required": 1, "description": "Bearer 令牌" }
211+
],
209212
"outputParams": [ // 接口出参(响应字段)
210213
{ "paramCode": "name", "paramName": "姓名", "paramType": "string", "required": 0, "description": "用户姓名" }
211214
]
@@ -215,7 +218,7 @@ 只输出 JSON(不要 markdown 围栏、不要解释),结构如下:
215218
规则:
216219
1. suiteCode/methodCode 用英文小驼峰或下划线,全局唯一。
217220
2. 每个接口必须有 methodCode、methodName、url、requestType。
218-
3. 根据接口功能合理设计 inputParams(POST 多为 body、GET 多为 query)与 outputParams(响应字段),paramType 取 string/integer/double/boolean/object/array。
221+
3. 根据接口功能合理设计 inputParams(POST 多为 body、GET 多为 query)、headerParams(需要鉴权时生成 Authorization 等,无需鉴权的接口可为空数组)与 outputParams(响应字段),paramType 取 string/integer/double/boolean/object/array。
219222
4. 接口数量与需求匹配,不要遗漏也不要过度添加。
220223
""";
221224
var userPrompt = $"""
@@ -266,6 +269,7 @@ private static object ExtractAndValidateApis(string content)
266269
url = GetStr(a, "url"),
267270
requestType = GetStr(a, "requestType") == "GET" ? "GET" : "POST",
268271
inputParams = ExtractParamArray(a, "inputParams"),
272+
headerParams = ExtractParamArray(a, "headerParams"),
269273
outputParams = ExtractParamArray(a, "outputParams")
270274
});
271275
}
@@ -321,8 +325,9 @@ public async Task<object> ApplyApisAsync(List<Dictionary<string, object?>>? suit
321325
await _db.SaveChangesAsync();
322326
createdApis++;
323327

324-
// 写入接口入参/出参(paramType: 1=入参 2=出参)
328+
// 写入接口入参/header/出参(paramType: 1=入参 4=header 2=出参)
325329
createdParams += await SaveApiParamsAsync(apiEntity.Id, code, 1, ToParamList(a.GetValueOrDefault("inputParams")));
330+
createdParams += await SaveApiParamsAsync(apiEntity.Id, code, 4, ToParamList(a.GetValueOrDefault("headerParams")));
326331
createdParams += await SaveApiParamsAsync(apiEntity.Id, code, 2, ToParamList(a.GetValueOrDefault("outputParams")));
327332
}
328333
return new { createdSuites, createdApis, createdParams };
@@ -370,7 +375,7 @@ private async Task<int> SaveApiParamsAsync(long ownerId, string ownerCode, int p
370375
ParamCode = code,
371376
ParamName = p.GetValueOrDefault("paramName")?.ToString() ?? code,
372377
DataType = p.GetValueOrDefault("paramType")?.ToString() ?? "string",
373-
Required = p.GetValueOrDefault("required") is int r ? r : 0,
378+
Required = p.GetValueOrDefault("required") switch { int r => r, long rl => (int)rl, _ => 0 },
374379
DefaultValue = p.GetValueOrDefault("defaultValue")?.ToString(),
375380
Description = p.GetValueOrDefault("description")?.ToString(),
376381
ParamPosition = p.GetValueOrDefault("paramPosition")?.ToString(),
@@ -429,7 +434,7 @@ private async Task<int> SaveParamsAsync(long ownerId, string ownerCode, int para
429434
ParamCode = code,
430435
ParamName = p.GetValueOrDefault("paramName")?.ToString() ?? code,
431436
DataType = p.GetValueOrDefault("paramType")?.ToString() ?? "string",
432-
Required = p.GetValueOrDefault("required") is int r ? r : 0,
437+
Required = p.GetValueOrDefault("required") switch { int r => r, long rl => (int)rl, _ => 0 },
433438
DefaultValue = p.GetValueOrDefault("defaultValue")?.ToString(),
434439
Description = p.GetValueOrDefault("description")?.ToString(),
435440
ParamPosition = p.GetValueOrDefault("paramPosition")?.ToString(),

‎JuggleNet6.Frontend/src/views/ai/ApiAssistant.vue‎

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,27 +42,39 @@
4242
<el-table :data="preview.apis" size="small" border max-height="320" row-key="methodCode">
4343
<el-table-column type="expand">
4444
<template #default="{ row }">
45-
<div style="display:flex;gap:16px;padding:8px 16px">
46-
<div style="flex:1">
47-
<div style="font-weight:600;margin-bottom:4px;font-size:12px">入参({{ row.inputParams?.length || 0 }})</div>
45+
<div style="display:flex;gap:12px;padding:8px 12px">
46+
<div style="flex:1;min-width:0">
47+
<div style="font-weight:600;margin-bottom:4px;font-size:12px">入参配置({{ row.inputParams?.length || 0 }})</div>
4848
<el-table :data="row.inputParams || []" size="small" border>
49-
<el-table-column prop="paramCode" label="参数code" min-width="130" show-overflow-tooltip />
50-
<el-table-column prop="paramName" label="名称" min-width="100" show-overflow-tooltip />
51-
<el-table-column prop="paramType" label="类型" width="90" />
52-
<el-table-column prop="paramPosition" label="位置" width="70" />
53-
<el-table-column label="必填" width="60" align="center">
49+
<el-table-column prop="paramCode" label="参数code" min-width="110" show-overflow-tooltip />
50+
<el-table-column prop="paramName" label="名称" min-width="90" show-overflow-tooltip />
51+
<el-table-column prop="paramType" label="类型" width="80" />
52+
<el-table-column prop="paramPosition" label="位置" width="60" />
53+
<el-table-column label="必填" width="55" align="center">
5454
<template #default="{ row: r }"><el-tag size="small" :type="r.required ? 'danger' : 'info'">{{ r.required ? '是' : '否' }}</el-tag></template>
5555
</el-table-column>
56-
<el-table-column prop="description" label="说明" min-width="120" show-overflow-tooltip />
56+
<el-table-column prop="description" label="说明" min-width="100" show-overflow-tooltip />
5757
</el-table>
5858
</div>
59-
<div style="flex:1">
60-
<div style="font-weight:600;margin-bottom:4px;font-size:12px">出参({{ row.outputParams?.length || 0 }})</div>
59+
<div style="flex:1;min-width:0">
60+
<div style="font-weight:600;margin-bottom:4px;font-size:12px">Header 配置({{ row.headerParams?.length || 0 }})</div>
61+
<el-table :data="row.headerParams || []" size="small" border>
62+
<el-table-column prop="paramCode" label="Header名" min-width="110" show-overflow-tooltip />
63+
<el-table-column prop="paramName" label="名称" min-width="90" show-overflow-tooltip />
64+
<el-table-column prop="paramType" label="类型" width="80" />
65+
<el-table-column label="必填" width="55" align="center">
66+
<template #default="{ row: r }"><el-tag size="small" :type="r.required ? 'danger' : 'info'">{{ r.required ? '是' : '否' }}</el-tag></template>
67+
</el-table-column>
68+
<el-table-column prop="description" label="说明" min-width="100" show-overflow-tooltip />
69+
</el-table>
70+
</div>
71+
<div style="flex:1;min-width:0">
72+
<div style="font-weight:600;margin-bottom:4px;font-size:12px">出参配置({{ row.outputParams?.length || 0 }})</div>
6173
<el-table :data="row.outputParams || []" size="small" border>
62-
<el-table-column prop="paramCode" label="参数code" min-width="130" show-overflow-tooltip />
63-
<el-table-column prop="paramName" label="名称" min-width="100" show-overflow-tooltip />
64-
<el-table-column prop="paramType" label="类型" width="90" />
65-
<el-table-column prop="description" label="说明" min-width="120" show-overflow-tooltip />
74+
<el-table-column prop="paramCode" label="参数code" min-width="110" show-overflow-tooltip />
75+
<el-table-column prop="paramName" label="名称" min-width="90" show-overflow-tooltip />
76+
<el-table-column prop="paramType" label="类型" width="80" />
77+
<el-table-column prop="description" label="说明" min-width="100" show-overflow-tooltip />
6678
</el-table>
6779
</div>
6880
</div>

0 commit comments

Comments
 (0)