如何解决如何在springboot中使用swagger json处理API版本的AWS API网关
我们有 CICD 使用我们构建基础设施和部署 API 的云形成脚本。 詹金斯文件脚本:
第 1 步:我们的 swagger 将创建 swagger 文档。这将存储在 S3 存储桶中
sh "curl https://{host-name}/v2/api-docs?group=school-api-v1.0 -o ${WORKSPACE}/devl-schoolapi-doc.json"
第 2 步: sh "aws apigateway put-rest-api --rest-api-id ${env.API_ID} --mode overwrite --body 'file://${WORKSPACE}/devl-schoolapi-doc.json' --region us-east-1"
第 3 步: sh "aws apigateway create-deployment --rest-api-id ${env.API_ID} --stage-name ${env.ENVIRONMENT} --region us-east-1 "}
这将在 AWS env Gateway 上构建,并具有 v1/ 资源端点。 Gateway view
现在我想在此网关中为以下方法维护两个 API 版本。
1./student
2./v1/student
在我的 api 中,两个 swagger json 正在生成。由于这是次要版本,它应该具有相同的端点
1.https://{host-name}/v2/api-docs?group=school-api-v1.0
2.https://{host-name}/v2/api-docs?group=school-api-v1.1
目前我的脚本只显示网关中的 v1.0 版本
解决方法
public class SwaggerConfig implements OperationBuilderPlugin {
@Autowired
Environment env;
@Bean
public Docket docketApi() {
return new Docket(DocumentationType.SWAGGER_2).groupName("rest-api-v1.0")
.select()
.paths(paths())
.apis(RequestHandlerSelectors.any()).build()
.operationOrdering(new Ordering<Operation>() {
@Override
public int compare(Operation left,Operation right) {
return left.getMethod().name().compareTo(right.getMethod().name());
}
})
.apiInfo(apiEndPointsInfo());
}
private ApiInfo apiEndPointsInfo() {
return new ApiInfoBuilder().title(env.getProperty("env") + env.getProperty("appname"))
.description(env.getProperty("description")).contact(new Contact(env.getProperty("contact-name"),env.getProperty("contact-url"),env.getProperty("contact-email")))
.version(env.getProperty("version")).build();
}
@Bean
public Docket docketApi2() {
ParameterBuilder aParameterBuilder = new ParameterBuilder();
aParameterBuilder.name("Accept").modelRef(new ModelRef("string")).parameterType("header").defaultValue("application/v1.1+json").required(true).build();
List<Parameter> operationParameters = new ArrayList<>();
operationParameters.add(aParameterBuilder.build());
return new Docket(DocumentationType.SWAGGER_2)
.groupName("rest-api-v1.1")
.select().apis(RequestHandlerSelectors.basePackage(env.getProperty("basepackage")))
.paths(postPaths())
.paths(Predicates.not(PathSelectors.regex("/error.*")))
.build()
.operationOrdering(new Ordering<Operation>() {
@Override
public int compare(Operation left,Operation right) {
return left.getMethod().name().compareTo(right.getMethod().name());
}
})
.globalOperationParameters(operationParameters)
.apiInfo(new ApiInfoBuilder().title(env.getProperty("env") + env.getProperty("appname"))
.description(env.getProperty("description")).contact(new Contact(env.getProperty("contact-name"),env.getProperty("contact-email")))
.version("1.1").build());
}
private com.google.common.base.Predicate<String> postPaths() {
return Predicates.not(PathSelectors.regex("/v1.*"));
}
private com.google.common.base.Predicate<String> paths() {
return or(
regex("/v1.*"),regex("/health.*"));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。