Refine Swagger document for Extension APIs (#2180)

pull/2177/head^2
John Niang 2022-06-22 12:36:21 +08:00 committed by GitHub
parent ac7a3c86c8
commit c24df6fb05
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 89 additions and 12 deletions

View File

@ -86,11 +86,8 @@ public class WebServerSecurityConfig {
@Order(0)
SecurityWebFilterChain webFilterChain(ServerHttpSecurity http) {
http.authorizeExchange(exchanges -> exchanges.pathMatchers(
"/v3/api-docs/**",
"/v3/api-docs.yaml",
"/swagger-ui/**",
"/swagger-ui.html",
"/webjars/**").permitAll())
"/actuator/**"
).permitAll())
.authorizeExchange(exchanges -> exchanges.anyExchange().authenticated())
.cors(withDefaults())
.httpBasic(withDefaults())

View File

@ -1,10 +1,14 @@
package run.halo.app.extension;
import static org.springframework.web.reactive.function.server.RouterFunctions.route;
import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder;
import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder;
import static org.springdoc.core.fn.builders.requestbody.Builder.requestBodyBuilder;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import java.net.URI;
import java.time.Instant;
import java.util.Objects;
import org.springdoc.webflux.core.fn.SpringdocRouteBuilder;
import org.springframework.http.MediaType;
import org.springframework.lang.NonNull;
import org.springframework.util.StringUtils;
@ -35,12 +39,70 @@ public class ExtensionRouterFunctionFactory {
var updateHandler = new ExtensionUpdateHandler(scheme, client);
var deleteHandler = new ExtensionDeleteHandler(scheme, client);
// TODO More handlers here
return route()
.GET(getHandler.pathPattern(), getHandler)
.GET(listHandler.pathPattern(), listHandler)
.POST(createHandler.pathPattern(), createHandler)
.PUT(updateHandler.pathPattern(), updateHandler)
.DELETE(deleteHandler.pathPattern(), deleteHandler)
var gvk = scheme.groupVersionKind();
var tagName = gvk.toString();
return SpringdocRouteBuilder.route()
.GET(getHandler.pathPattern(), getHandler,
builder -> builder.operationId("Get" + gvk)
.description("Get " + gvk)
.tag(tagName)
.parameter(parameterBuilder().in(ParameterIn.PATH)
.name("name")
.description("Name of " + scheme.singular()))
.response(responseBuilder().responseCode("200")
.description("Response single " + scheme.singular())
.implementation(scheme.type())))
.GET(listHandler.pathPattern(), listHandler,
builder -> builder.operationId("List" + gvk)
.description("List " + gvk)
.tag(tagName)
.parameter(parameterBuilder().in(ParameterIn.QUERY)
.name("page")
.description("Page index")
.implementation(Integer.class))
.parameter(parameterBuilder().in(ParameterIn.QUERY)
.name("size")
.description("Size of one page")
.implementation(Integer.class))
.parameter(parameterBuilder().in(ParameterIn.QUERY)
.name("sort")
.description("Sort by some fields. Like metadata.name,desc"))
.response(responseBuilder().responseCode("200")
.description("Response " + scheme.plural())
.implementationArray(scheme.type())))
.POST(createHandler.pathPattern(), createHandler,
builder -> builder.operationId("Create" + gvk)
.description("Create " + gvk)
.tag(tagName)
.requestBody(requestBodyBuilder()
.description("Fresh " + scheme.singular())
.implementation(scheme.type()))
.response(responseBuilder().responseCode("200")
.description("Response " + scheme.plural() + " created just now")
.implementation(scheme.type())))
.PUT(updateHandler.pathPattern(), updateHandler,
builder -> builder.operationId("Update" + gvk)
.description("Update " + gvk)
.tag(tagName)
.parameter(parameterBuilder().in(ParameterIn.PATH)
.name("name")
.description("Name of " + scheme.singular()))
.requestBody(requestBodyBuilder()
.description("Updated " + scheme.singular())
.implementation(scheme.type()))
.response(responseBuilder().responseCode("200")
.description("Response " + scheme.plural() + " updated just now")
.implementation(scheme.type())))
.DELETE(deleteHandler.pathPattern(), deleteHandler,
builder -> builder.operationId("Delete" + gvk)
.description("Delete " + gvk)
.tag(tagName)
.parameter(parameterBuilder().in(ParameterIn.PATH)
.name("name")
.description("Name of " + scheme.singular()))
.response(responseBuilder().responseCode("200")
.description("Response " + scheme.singular() + " deleted just now")))
.build();
}

View File

@ -48,4 +48,12 @@ public record GroupVersionKind(String group, String version, String kind) {
var gv = GroupVersion.parseAPIVersion(apiVersion);
return new GroupVersionKind(gv.group(), gv.version(), kind);
}
@Override
public String toString() {
if (hasGroup()) {
return group + "/" + version + "/" + kind;
}
return version + "/" + kind;
}
}

View File

@ -52,3 +52,13 @@ springdoc:
swagger-ui:
enabled: true
show-login-endpoint: true
show-actuator: true
use-management-port: true
management:
endpoints:
web:
exposure:
include: openapi, swagger-ui
server:
port: 9090