feat (接口定义): 完成http协议操作历史

This commit is contained in:
fit2-zhao 2021-10-14 16:58:03 +08:00 committed by fit2-zhao
parent 6b9e9c1f5e
commit c79a7732e7
8 changed files with 220 additions and 67 deletions

View File

@ -154,10 +154,10 @@ public class ReflexObjectUtil {
DetailColumn column = new DetailColumn(); DetailColumn column = new DetailColumn();
BeanUtils.copyBean(column, originalColumns.get(i)); BeanUtils.copyBean(column, originalColumns.get(i));
column.setNewValue(newColumns.get(i).getOriginalValue()); column.setNewValue(newColumns.get(i).getOriginalValue());
if (originalColumns.get(i).getColumnName().equals("tags")) { if (StringUtils.isNotEmpty(originalColumns.get(i).getColumnName()) && originalColumns.get(i).getColumnName().equals("tags")) {
GsonDiff diff = new GsonDiff(); GsonDiff diff = new GsonDiff();
String oldTags = "{\"root\":" + originalColumns.get(i).getOriginalValue().toString() + "}"; String oldTags = "{\"root\":" + ((originalColumns.get(i) != null && originalColumns.get(i).getOriginalValue() != null) ? originalColumns.get(i).getOriginalValue().toString() : "\"\"") + "}";
String newTags = "{\"root\":" + newColumns.get(i).getOriginalValue().toString() + "}"; String newTags = "{\"root\":" + ((newColumns.get(i) != null && newColumns.get(i).getOriginalValue() != null) ? newColumns.get(i).getOriginalValue().toString() : "\"\"") + "}";
String diffStr = diff.diff(oldTags, newTags); String diffStr = diff.diff(oldTags, newTags);
String diffValue = diff.apply(newTags, diffStr); String diffValue = diff.apply(newTags, diffStr);
column.setDiffValue(diffValue); column.setDiffValue(diffValue);

View File

@ -50,7 +50,9 @@ public class ApiDefinitionDiffUtil {
MsDubboSampler dubboSamplerOld = bloBsOld.toJavaObject(MsDubboSampler.class); MsDubboSampler dubboSamplerOld = bloBsOld.toJavaObject(MsDubboSampler.class);
diffDubbo(dubboSamplerNew, dubboSamplerOld, jsonDiff, diffMap); diffDubbo(dubboSamplerNew, dubboSamplerOld, jsonDiff, diffMap);
} }
if (diffMap.size() > 1) {
return JSON.toJSONString(diffMap); return JSON.toJSONString(diffMap);
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -59,7 +61,7 @@ public class ApiDefinitionDiffUtil {
private static void diffHttp(MsHTTPSamplerProxy httpNew, MsHTTPSamplerProxy httpOld, JsonDiff jsonDiff, Map<String, String> diffMap) { private static void diffHttp(MsHTTPSamplerProxy httpNew, MsHTTPSamplerProxy httpOld, JsonDiff jsonDiff, Map<String, String> diffMap) {
// 请求头对比 old/new // 请求头对比 old/new
if (CollectionUtils.isNotEmpty(httpNew.getHeaders())) { if (CollectionUtils.isNotEmpty(httpNew.getHeaders()) && CollectionUtils.isNotEmpty(httpOld.getHeaders())) {
httpNew.getHeaders().remove(httpNew.getHeaders().size() - 1); httpNew.getHeaders().remove(httpNew.getHeaders().size() - 1);
httpOld.getHeaders().remove(httpOld.getHeaders().size() - 1); httpOld.getHeaders().remove(httpOld.getHeaders().size() - 1);
} }
@ -73,7 +75,7 @@ public class ApiDefinitionDiffUtil {
} }
} }
// 对比QUERY参数 // 对比QUERY参数
if (CollectionUtils.isNotEmpty(httpNew.getArguments())) { if (CollectionUtils.isNotEmpty(httpNew.getArguments()) && CollectionUtils.isNotEmpty(httpOld.getArguments())) {
httpNew.getArguments().remove(httpNew.getArguments().size() - 1); httpNew.getArguments().remove(httpNew.getArguments().size() - 1);
httpOld.getArguments().remove(httpOld.getArguments().size() - 1); httpOld.getArguments().remove(httpOld.getArguments().size() - 1);
} }
@ -87,7 +89,7 @@ public class ApiDefinitionDiffUtil {
} }
} }
// 对比REST参数 // 对比REST参数
if (CollectionUtils.isNotEmpty(httpNew.getRest())) { if (CollectionUtils.isNotEmpty(httpNew.getRest()) && CollectionUtils.isNotEmpty(httpOld.getRest())) {
httpNew.getRest().remove(httpNew.getRest().size() - 1); httpNew.getRest().remove(httpNew.getRest().size() - 1);
httpOld.getRest().remove(httpOld.getRest().size() - 1); httpOld.getRest().remove(httpOld.getRest().size() - 1);
} }
@ -112,7 +114,7 @@ public class ApiDefinitionDiffUtil {
} }
} }
// 对比BODY-FORM参数 // 对比BODY-FORM参数
if (CollectionUtils.isNotEmpty(httpNew.getBody().getKvs())) { if (CollectionUtils.isNotEmpty(httpNew.getBody().getKvs()) && CollectionUtils.isNotEmpty(httpOld.getBody().getKvs())) {
httpNew.getBody().getKvs().remove(httpNew.getBody().getKvs().size() - 1); httpNew.getBody().getKvs().remove(httpNew.getBody().getKvs().size() - 1);
httpOld.getBody().getKvs().remove(httpOld.getBody().getKvs().size() - 1); httpOld.getBody().getKvs().remove(httpOld.getBody().getKvs().size() - 1);
} }
@ -131,6 +133,25 @@ public class ApiDefinitionDiffUtil {
diffMap.put("body_raw_2", httpOld.getBody().getRaw()); diffMap.put("body_raw_2", httpOld.getBody().getRaw());
} }
// 认证配置
if (httpNew.getAuthManager() != null || httpOld.getAuthManager() != null) {
List<DetailColumn> authColumns = ReflexObjectUtil.getColumns(httpNew.getAuthManager(), DefinitionReference.authColumns);
List<DetailColumn> authColumnsOld = ReflexObjectUtil.getColumns(httpOld.getAuthManager(), DefinitionReference.authColumns);
List<DetailColumn> authDiffColumns = getColumn(authColumns, authColumnsOld);
if (CollectionUtils.isNotEmpty(authDiffColumns)) {
diffMap.put("body_auth", JSON.toJSONString(authDiffColumns));
} else if (CollectionUtils.isEmpty(authDiffColumns) && CollectionUtils.isEmpty(authColumnsOld) && CollectionUtils.isNotEmpty(authColumns)) {
diffMap.put("body_auth", JSON.toJSONString(authColumns));
}
}
// 其他设置
List<DetailColumn> columns = ReflexObjectUtil.getColumns(httpNew, DefinitionReference.httpColumns);
List<DetailColumn> columnsOld = ReflexObjectUtil.getColumns(httpOld, DefinitionReference.httpColumns);
List<DetailColumn> diffColumns = getColumn(columns, columnsOld);
if (CollectionUtils.isNotEmpty(diffColumns)) {
diffMap.put("body_config", JSON.toJSONString(diffColumns));
}
} }
} }

View File

@ -7,11 +7,15 @@ public class DefinitionReference {
public static Map<String, String> definitionColumns = new LinkedHashMap<>(); public static Map<String, String> definitionColumns = new LinkedHashMap<>();
public static Map<String, String> caseColumns = new LinkedHashMap<>(); public static Map<String, String> caseColumns = new LinkedHashMap<>();
public static Map<String, String> jdbcColumns = new LinkedHashMap<>(); public static Map<String, String> jdbcColumns = new LinkedHashMap<>();
public static Map<String, String> httpColumns = new LinkedHashMap<>();
public static Map<String, String> authColumns = new LinkedHashMap<>();
static { static {
definitionColumns.clear(); definitionColumns.clear();
caseColumns.clear(); caseColumns.clear();
jdbcColumns.clear(); jdbcColumns.clear();
httpColumns.clear();
authColumns.clear();
definitionColumns.put("name", "接口名称"); definitionColumns.put("name", "接口名称");
definitionColumns.put("createUser", "创建人"); definitionColumns.put("createUser", "创建人");
definitionColumns.put("method", "请求类型"); definitionColumns.put("method", "请求类型");
@ -46,6 +50,16 @@ public class DefinitionReference {
jdbcColumns.put("queryTimeout", "超时时间"); jdbcColumns.put("queryTimeout", "超时时间");
jdbcColumns.put("resultVariable", "存储结果"); jdbcColumns.put("resultVariable", "存储结果");
jdbcColumns.put("variableNames", "按列存储"); jdbcColumns.put("variableNames", "按列存储");
// http
httpColumns.put("connectTimeout","连接超时");
httpColumns.put("responseTimeout","响应超时");
httpColumns.put("alias","证书别名");
httpColumns.put("followRedirects","跟随重定向");
// http auth
authColumns.put("verification","认证方式");
authColumns.put("username","用户名");
authColumns.put("password","密码");
authColumns.put("encrypt","加密");
} }
} }

View File

@ -99,7 +99,9 @@
this.request.hashTree.splice(index, 1); this.request.hashTree.splice(index, 1);
} }
} }
this.request.authManager = {};
} }
this.request.authManager = this.authConfig;
} }
} }
} }

View File

@ -3,11 +3,20 @@
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane label="Config Center" name="config" v-if="request.config && request.config.length > 0"> <el-tab-pane label="Config Center" name="config" v-if="request.config && request.config.length > 0">
<el-table :data="request.config"> <el-table :data="request.config">
<el-table-column prop="columnTitle" :label="$t('operating_log.change_field')"> <el-table-column prop="columnTitle" :label="$t('operating_log.change_field')"/>
</el-table-column>
<el-table-column prop="originalValue" :label="$t('operating_log.before_change')"> <el-table-column prop="originalValue" :label="$t('operating_log.before_change')">
<template v-slot:default="scope">
<el-tooltip :content="scope.row.originalValue">
<div class="current-value ms-tag-del">{{ scope.row.originalValue }}</div>
</el-tooltip>
</template>
</el-table-column> </el-table-column>
<el-table-column prop="newValue" :label="$t('operating_log.after_change')"> <el-table-column prop="newValue" :label="$t('operating_log.after_change')">
<template v-slot:default="scope">
<el-tooltip :content="scope.row.newValue">
<div class="current-value ms-tag-add">{{ scope.row.newValue }}</div>
</el-tooltip>
</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
@ -113,6 +122,7 @@ export default {
white-space: nowrap; white-space: nowrap;
width: 120px; width: 120px;
} }
.ms-tag-del { .ms-tag-del {
text-decoration: line-through; text-decoration: line-through;
text-decoration-color: red; text-decoration-color: red;

View File

@ -101,9 +101,13 @@ export default {
this.detail.body = {}; this.detail.body = {};
this.detail.headerId = getUUID(); this.detail.headerId = getUUID();
if (diffValue.body) { if (diffValue.body) {
let jsonSchema = (JSON.parse(diffValue.body)).jsonSchema; let json = (JSON.parse(diffValue.body));
this.formatJson(jsonSchema.properties); if (json && json.jsonSchema && json.jsonSchema.properties) {
this.detail.body.jsonSchema = jsonSchema; this.formatJson(json.jsonSchema.properties);
this.detail.body.jsonSchema = json.jsonSchema;
} else if (json && json["++jsonSchema"]) {
this.detail.body.jsonSchema = json["++jsonSchema"];
}
this.detail.headerId = getUUID(); this.detail.headerId = getUUID();
} }
if (diffValue.body_form) { if (diffValue.body_form) {
@ -131,6 +135,14 @@ export default {
this.detail.rest = rest; this.detail.rest = rest;
this.detail.headerId = getUUID(); this.detail.headerId = getUUID();
} }
if (diffValue.body_auth) {
this.detail.body_auth = JSON.parse(diffValue.body_auth);
this.detail.headerId = getUUID();
}
if (diffValue.body_config) {
this.detail.body_config = JSON.parse(diffValue.body_config);
this.detail.headerId = getUUID();
}
}, },
formatTcp(diffValue) { formatTcp(diffValue) {
if (!this.detail.body) { if (!this.detail.body) {

View File

@ -30,11 +30,46 @@
</el-tab-pane> </el-tab-pane>
<!--认证配置 --> <!--认证配置 -->
<!-- <el-tab-pane :label="$t('api_test.definition.request.auth_config')" name="authConfig">--> <el-tab-pane :label="$t('api_test.definition.request.auth_config')" name="authConfig" v-if="request.body_auth">
<!-- </el-tab-pane>--> <el-table :data="request.body_auth">
<el-table-column prop="columnTitle" :label="$t('operating_log.change_field')"/>
<el-table-column prop="originalValue" :label="$t('operating_log.before_change')">
<template v-slot:default="scope">
<el-tooltip :content="scope.row.originalValue">
<div class="current-value ms-tag-del">{{ scope.row.originalValue }}</div>
</el-tooltip>
</template>
</el-table-column>
<el-table-column prop="newValue" :label="$t('operating_log.after_change')">
<template v-slot:default="scope">
<el-tooltip :content="scope.row.newValue">
<div class="current-value ms-tag-add">{{ scope.row.newValue }}</div>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<!-- <el-tab-pane :label="$t('api_test.definition.request.other_config')" name="advancedConfig">--> </el-tab-pane>
<!-- </el-tab-pane>-->
<el-tab-pane :label="$t('api_test.definition.request.other_config')" name="advancedConfig" v-if="request.body_config">
<el-table :data="request.body_config">
<el-table-column prop="columnTitle" :label="$t('operating_log.change_field')"/>
<el-table-column prop="originalValue" :label="$t('operating_log.before_change')">
<template v-slot:default="scope">
<el-tooltip :content="scope.row.originalValue">
<div class="current-value ms-tag-del">{{ scope.row.originalValue }}</div>
</el-tooltip>
</template>
</el-table-column>
<el-table-column prop="newValue" :label="$t('operating_log.after_change')">
<template v-slot:default="scope">
<el-tooltip :content="scope.row.newValue">
<div class="current-value ms-tag-add">{{ scope.row.newValue }}</div>
</el-tooltip>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
@ -79,6 +114,10 @@ export default {
this.activeName = "headers"; this.activeName = "headers";
} else if (this.request.rest) { } else if (this.request.rest) {
this.activeName = "rest"; this.activeName = "rest";
} else if (this.request.body_config) {
this.activeName = "advancedConfig";
} else if (this.request.body_auth) {
this.activeName = "authConfig";
} }
this.reloadCodeEdit(); this.reloadCodeEdit();
}, },
@ -101,6 +140,10 @@ export default {
this.activeName = "headers"; this.activeName = "headers";
} else if (this.request.rest) { } else if (this.request.rest) {
this.activeName = "rest"; this.activeName = "rest";
} else if (this.request.body_config) {
this.activeName = "advancedConfig";
} else if (this.request.body_auth) {
this.activeName = "authConfig";
} }
this.reloadCodeEdit(); this.reloadCodeEdit();
} }
@ -145,6 +188,27 @@ export default {
margin-right: 45px; margin-right: 45px;
} }
.current-value {
display: inline-block;
overflow-x: hidden;
padding-bottom: 0;
text-overflow: ellipsis;
vertical-align: middle;
white-space: nowrap;
width: 120px;
}
.ms-tag-del {
text-decoration: line-through;
text-decoration-color: red;
-moz-text-decoration-line: line-through;
background: #F3E6E7;
}
.ms-tag-add {
background: #E2ECDC;
}
@import "~jsondiffpatch/dist/formatters-styles/html.css"; @import "~jsondiffpatch/dist/formatters-styles/html.css";
@import "~jsondiffpatch/dist/formatters-styles/annotated.css"; @import "~jsondiffpatch/dist/formatters-styles/annotated.css";

View File

@ -3,11 +3,20 @@
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane :label="$t('api_test.definition.request.req_param')" name="parameters" v-if="request.base && request.base.length > 0"> <el-tab-pane :label="$t('api_test.definition.request.req_param')" name="parameters" v-if="request.base && request.base.length > 0">
<el-table :data="request.base"> <el-table :data="request.base">
<el-table-column prop="columnTitle" :label="$t('operating_log.change_field')"> <el-table-column prop="columnTitle" :label="$t('operating_log.change_field')"/>
</el-table-column>
<el-table-column prop="originalValue" :label="$t('operating_log.before_change')"> <el-table-column prop="originalValue" :label="$t('operating_log.before_change')">
<template v-slot:default="scope">
<el-tooltip :content="scope.row.originalValue">
<div class="current-value ms-tag-del">{{ scope.row.originalValue }}</div>
</el-tooltip>
</template>
</el-table-column> </el-table-column>
<el-table-column prop="newValue" :label="$t('operating_log.after_change')"> <el-table-column prop="newValue" :label="$t('operating_log.after_change')">
<template v-slot:default="scope">
<el-tooltip :content="scope.row.newValue">
<div class="current-value ms-tag-add">{{ scope.row.newValue }}</div>
</el-tooltip>
</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
@ -90,6 +99,27 @@ export default {
display: inline-block; display: inline-block;
} }
.current-value {
display: inline-block;
overflow-x: hidden;
padding-bottom: 0;
text-overflow: ellipsis;
vertical-align: middle;
white-space: nowrap;
width: 120px;
}
.ms-tag-del {
text-decoration: line-through;
text-decoration-color: red;
-moz-text-decoration-line: line-through;
background: #F3E6E7;
}
.ms-tag-add {
background: #E2ECDC;
}
.one-row .el-form-item:nth-child(2) { .one-row .el-form-item:nth-child(2) {
margin-left: 60px; margin-left: 60px;
} }