This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 62629e5a4 [type:refactor]Split the document field of the apidoc detail
interface,and add fields such as requestHeaders and responseParameters. (#4865)
62629e5a4 is described below
commit 62629e5a4db82e5cfb695e579fd5fc467ebd3f05
Author: lianjunwei <[email protected]>
AuthorDate: Tue Jul 18 14:42:28 2023 +0800
[type:refactor]Split the document field of the apidoc detail interface,and
add fields such as requestHeaders and responseParameters. (#4865)
* apidoc sql
* refact
* commit
* [Task] Shenyu-admin: Fix API document failed to build because of NPE.
* [Task] Shenyu-admin: Fix API document failed to build because of NPE.
* solve conficts,modify LICENSE.
* delete useless code.
* delete useless code.
* commit
* [ISSUE #3843]admin apidoc fix: the required attribute prompt is incorrect
when micro service parameter uses "@ApiModelProperty".
* commit
* [shenyu-examples]add swagger to the example project to test the apidoc
function of the gateway management system.
* commit
* commit
* commit
* [ISSUE #4690]Supports gzip compression in response to HTTP requests.
* [examples]Add Swagger sample project to demonstrate automatic pull
interface documentation.
* delete exapmple
* delete useless code.
* delete useless code.
* swagger apidoc from local cache to database persistence.
* Storage adjustment for swagger type documents :from local cache to
database persistence.
* fix get httpMethod
* Fix unit testing.
* Fix unit testing.
* The field splitting of apidoc details API, add requestHeaders,
responseParameters, and more.
* Fix unit testing.
* code style.
* Fix unit testing.
* delete unused imports.
* fix JSON data for testing.
* commit
* commit
* commit
---------
Co-authored-by: lianjunwei <[email protected]>
Co-authored-by: dragon-zhang <[email protected]>
Co-authored-by: xiaoyu <[email protected]>
---
.../org/apache/shenyu/admin/model/vo/ApiVO.java | 80 ++++++++++++++++++++++
.../shenyu/admin/service/impl/ApiServiceImpl.java | 30 +++++---
.../shenyu/admin/controller/ApiControllerTest.java | 2 +-
.../shenyu/admin/service/ApiServiceTest.java | 6 +-
.../service/manager/impl/SwaggerDocParserTest.java | 6 +-
5 files changed, 109 insertions(+), 15 deletions(-)
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/ApiVO.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/ApiVO.java
index f3245709f..a9088f515 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/ApiVO.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/vo/ApiVO.java
@@ -17,6 +17,8 @@
package org.apache.shenyu.admin.model.vo;
+import org.apache.shenyu.admin.model.bean.CustomCode;
+import org.apache.shenyu.admin.model.bean.DocParameter;
import org.apache.shenyu.admin.model.entity.ApiDO;
import java.io.Serializable;
@@ -105,6 +107,14 @@ public class ApiVO implements Serializable {
*/
private String documentMd5;
+ private List<DocParameter> requestHeaders;
+
+ private List<DocParameter> requestParameters;
+
+ private List<DocParameter> responseParameters;
+
+ private List<CustomCode> bizCustomCodeList;
+
/**
* create time.
*/
@@ -390,6 +400,76 @@ public class ApiVO implements Serializable {
this.documentMd5 = documentMd5;
}
+ /**
+ * get requestHeaders.
+ *
+ * @return request headers
+ */
+ public List<DocParameter> getRequestHeaders() {
+ return requestHeaders;
+ }
+
+ /**
+ * set requestHeaders.
+ *
+ * @param requestHeaders requestHeaders
+ */
+ public void setRequestHeaders(final List<DocParameter> requestHeaders) {
+ this.requestHeaders = requestHeaders;
+ }
+
+ /**
+ * get requestParameters.
+ *
+ * @return List
+ */
+ public List<DocParameter> getRequestParameters() {
+ return requestParameters;
+ }
+
+ /**
+ * set requestParameters.
+ *
+ * @param requestParameters requestParameters
+ */
+ public void setRequestParameters(final List<DocParameter>
requestParameters) {
+ this.requestParameters = requestParameters;
+ }
+
+ /**
+ * get responseParameters.
+ *
+ * @return List
+ */
+ public List<DocParameter> getResponseParameters() {
+ return responseParameters;
+ }
+
+ /**
+ * set responseParameters.
+ *
+ * @param responseParameters responseParameters
+ */
+ public void setResponseParameters(final List<DocParameter>
responseParameters) {
+ this.responseParameters = responseParameters;
+ }
+
+ /**
+ * get bizCustomCodeList.
+ * @return List
+ */
+ public List<CustomCode> getBizCustomCodeList() {
+ return bizCustomCodeList;
+ }
+
+ /**
+ * set bizCustomCodeList.
+ * @param bizCustomCodeList bizCustomCodeList
+ */
+ public void setBizCustomCodeList(final List<CustomCode> bizCustomCodeList)
{
+ this.bizCustomCodeList = bizCustomCodeList;
+ }
+
/**
* getDateCreated.
*
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ApiServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ApiServiceImpl.java
index 466830ec9..9bf241ffe 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ApiServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ApiServiceImpl.java
@@ -24,6 +24,7 @@ import
org.apache.shenyu.admin.disruptor.RegisterClientServerDisruptorPublisher;
import org.apache.shenyu.admin.mapper.ApiMapper;
import org.apache.shenyu.admin.mapper.TagMapper;
import org.apache.shenyu.admin.mapper.TagRelationMapper;
+import org.apache.shenyu.admin.model.bean.DocItem;
import org.apache.shenyu.admin.model.dto.ApiDTO;
import org.apache.shenyu.admin.model.entity.ApiDO;
import org.apache.shenyu.admin.model.entity.TagDO;
@@ -37,6 +38,8 @@ import org.apache.shenyu.admin.model.vo.ApiVO;
import org.apache.shenyu.admin.model.vo.RuleVO;
import org.apache.shenyu.admin.model.vo.TagVO;
import org.apache.shenyu.admin.service.ApiService;
+import org.apache.shenyu.common.enums.ApiSourceEnum;
+import org.apache.shenyu.common.utils.JsonUtils;
import org.apache.shenyu.common.utils.ListUtil;
import org.apache.shenyu.admin.service.MetaDataService;
import org.apache.shenyu.admin.service.RuleService;
@@ -65,11 +68,11 @@ import java.util.stream.Collectors;
public class ApiServiceImpl implements ApiService {
private final SelectorService selectorService;
-
+
private final RuleService ruleService;
-
+
private final MetaDataService metaDataService;
-
+
private final ApiMapper apiMapper;
private final TagRelationMapper tagRelationMapper;
@@ -159,7 +162,7 @@ public class ApiServiceImpl implements ApiService {
}
return ShenyuResultMessage.CREATE_SUCCESS;
}
-
+
private void unregister(final ApiDO apiDO) {
final String path = apiDO.getApiPath();
RuleQueryCondition condition = new RuleQueryCondition();
@@ -185,7 +188,7 @@ public class ApiServiceImpl implements ApiService {
Optional.ofNullable(metaDataService.findByPath(path))
.ifPresent(metaDataDO ->
metaDataService.delete(Lists.newArrayList(metaDataDO.getId())));
}
-
+
private void register(final ApiDO apiDO) {
//register selector/rule/metadata if necessary
final ApiDocRegisterDTO.ApiExt ext =
GsonUtils.getInstance().fromJson(apiDO.getExt(),
ApiDocRegisterDTO.ApiExt.class);
@@ -220,7 +223,7 @@ public class ApiServiceImpl implements ApiService {
.rpcType(apiDO.getRpcType())
.build());
}
-
+
@Override
@Transactional(rollbackFor = Exception.class)
public String delete(final List<String> ids) {
@@ -243,12 +246,21 @@ public class ApiServiceImpl implements ApiService {
return Optional.ofNullable(apiMapper.selectByPrimaryKey(id)).map(item
-> {
List<TagRelationDO> tagRelations =
tagRelationMapper.selectByQuery(TagRelationQuery.builder().apiId(item.getId()).build());
List<String> tagIds =
tagRelations.stream().map(TagRelationDO::getTagId).collect(Collectors.toList());
- List<TagVO> tagVOS = Lists.newArrayList();
+ List<TagVO> tagVOs = Lists.newArrayList();
if (CollectionUtils.isNotEmpty(tagIds)) {
List<TagDO> tagDOS = tagMapper.selectByIds(tagIds);
- tagVOS =
tagDOS.stream().map(TagVO::buildTagVO).collect(Collectors.toList());
+ tagVOs =
tagDOS.stream().map(TagVO::buildTagVO).collect(Collectors.toList());
}
- return ApiVO.buildApiVO(item, tagVOS);
+ ApiVO apiVO = ApiVO.buildApiVO(item, tagVOs);
+ if (apiVO.getApiSource().equals(ApiSourceEnum.SWAGGER.getValue()))
{
+ DocItem docItem = JsonUtils.jsonToObject(apiVO.getDocument(),
DocItem.class);
+ apiVO.setRequestHeaders(docItem.getRequestHeaders());
+ apiVO.setRequestParameters(docItem.getRequestParameters());
+ apiVO.setResponseParameters(docItem.getResponseParameters());
+ apiVO.setBizCustomCodeList(docItem.getBizCodeList());
+ }
+ return apiVO;
+
}).orElse(null);
}
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/ApiControllerTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/ApiControllerTest.java
index f94275aec..0eb11ac73 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/ApiControllerTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/ApiControllerTest.java
@@ -90,7 +90,7 @@ public final class ApiControllerTest {
.rpcType("/dubbo")
.state(0)
.apiSource(0)
- .document("document")
+ .document("{}")
.build();
SpringBeanUtils.getInstance().setApplicationContext(mock(ConfigurableApplicationContext.class));
}
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/ApiServiceTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/ApiServiceTest.java
index 2532563f7..dd7b719e7 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/ApiServiceTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/ApiServiceTest.java
@@ -150,7 +150,7 @@ public final class ApiServiceTest {
apiDTO.setApiOwner("string");
apiDTO.setApiDesc("string");
apiDTO.setApiSource(0);
- apiDTO.setDocument("document");
+ apiDTO.setDocument("{}");
return apiDTO;
}
@@ -158,7 +158,9 @@ public final class ApiServiceTest {
ApiDTO apiDTO = new ApiDTO();
apiDTO.setId(id);
apiDTO.setApiPath("test");
- apiDTO.setDocument("testDocument");
+ apiDTO.setDocument("{\n"
+ + " \"module\":\"http-test-controller\"\n"
+ + "}");
assertEquals(ShenyuResultMessage.UPDATE_SUCCESS,
this.apiService.createOrUpdate(apiDTO));
}
}
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/manager/impl/SwaggerDocParserTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/manager/impl/SwaggerDocParserTest.java
index acc32c604..323c96757 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/manager/impl/SwaggerDocParserTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/manager/impl/SwaggerDocParserTest.java
@@ -98,7 +98,8 @@ public class SwaggerDocParserTest {
+ " }\n"
+ " },\n"
+ " \"deprecated\":false\n"
- + " }\n"
+ + " }\n"
+ + " }\n"
+ " },\n"
+ " \"/test/payment\":{\n"
+ " \"post\":{\n"
@@ -142,7 +143,6 @@ public class SwaggerDocParserTest {
+ " },\n"
+ " \"deprecated\":false\n"
+ " }\n"
- + " }\n"
+ " }\n"
+ " },\n"
+ " \"definitions\":{\n"
@@ -200,6 +200,6 @@ public class SwaggerDocParserTest {
JsonObject docRoot = GsonUtils.getInstance().fromJson(DOC_INFO_JSON,
JsonObject.class);
docRoot.addProperty("basePath", "/" + "testClusterName");
DocInfo docInfo = swaggerDocParser.parseJson(docRoot);
- assert
docInfo.getDocModuleList().get(0).getModule().equals("shenyu-examples-http-swagger2
API");
+ assert docInfo.getDocModuleList().get(0).getModule().equals("Order
API");
}
}