编辑此页面

使用 OpenAPI 和 Swagger UI

本指南将介绍 Quarkus 应用程序如何通过 OpenAPI 规范公开其 API 描述,以及如何通过名为 Swagger UI 的用户友好界面进行测试。

先决条件

要完成本指南,您需要

  • 大约 15 分钟

  • 一个 IDE

  • 已安装 JDK 17+ 并正确配置了 JAVA_HOME

  • Apache Maven 3.9.9

  • 如果您想使用它,可以选择 Quarkus CLI

  • 如果您想构建本机可执行文件(或者如果您使用本机容器构建,则为 Docker),可以选择安装 Mandrel 或 GraalVM 并进行适当的配置

架构

在本指南中,我们将创建一个简单的 REST 应用程序,以演示如何快速公开 API 规范并利用用户界面进行测试。

解决方案

我们建议您按照以下部分的说明逐步创建应用程序。但是,您可以直接跳到完成的示例。

克隆 Git 存储库:git clone https://github.com/quarkusio/quarkus-quickstarts.git,或下载存档

解决方案位于 openapi-swaggerui-quickstart 目录中。

创建 Maven 项目

首先,我们需要一个新项目。使用以下命令创建一个新项目

CLI
quarkus create app org.acme:openapi-swaggerui-quickstart \
    --extension='rest-jackson' \
    --no-code
cd openapi-swaggerui-quickstart

要创建 Gradle 项目,请添加 --gradle--gradle-kotlin-dsl 选项。

有关如何安装和使用 Quarkus CLI 的更多信息,请参阅 Quarkus CLI 指南。

Maven
mvn io.quarkus.platform:quarkus-maven-plugin:3.24.4:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=openapi-swaggerui-quickstart \
    -Dextensions='rest-jackson' \
    -DnoCode
cd openapi-swaggerui-quickstart

要创建 Gradle 项目,请添加 -DbuildTool=gradle-DbuildTool=gradle-kotlin-dsl 选项。

对于 Windows 用户

  • 如果使用 cmd,(不要使用反斜杠 \ 并将所有内容放在同一行上)

  • 如果使用 Powershell,请将 -D 参数用双引号括起来,例如 "-DprojectArtifactId=openapi-swaggerui-quickstart"

公开 REST 资源

我们将创建一个 Fruit bean 和一个 FruitResource REST 资源(如果您想了解更多关于如何使用 Quarkus 构建 REST API 的细节,请随时查看编写 JSON REST 服务指南)。

package org.acme.openapi.swaggerui;

public class Fruit {

    public String name;
    public String description;

    public Fruit() {
    }

    public Fruit(String name, String description) {
        this.name = name;
        this.description = description;
    }
}
package org.acme.openapi.swaggerui;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.DELETE;
import jakarta.ws.rs.Path;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Set;

@Path("/fruits")
public class FruitResource {

    private Set<Fruit> fruits = Collections.newSetFromMap(Collections.synchronizedMap(new LinkedHashMap<>()));

    public FruitResource() {
        fruits.add(new Fruit("Apple", "Winter fruit"));
        fruits.add(new Fruit("Pineapple", "Tropical fruit"));
    }

    @GET
    public Set<Fruit> list() {
        return fruits;
    }

    @POST
    public Set<Fruit> add(Fruit fruit) {
        fruits.add(fruit);
        return fruits;
    }

    @DELETE
    public Set<Fruit> delete(Fruit fruit) {
        fruits.removeIf(existingFruit -> existingFruit.name.contentEquals(fruit.name));
        return fruits;
    }
}

您也可以创建一个测试

package org.acme.openapi.swaggerui;

import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;

import jakarta.ws.rs.core.MediaType;

import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.containsInAnyOrder;

@QuarkusTest
public class FruitResourceTest {

    @Test
    public void testList() {
        given()
                .when().get("/fruits")
                .then()
                .statusCode(200)
                .body("$.size()", is(2),
                        "name", containsInAnyOrder("Apple", "Pineapple"),
                        "description", containsInAnyOrder("Winter fruit", "Tropical fruit"));
    }

    @Test
    public void testAdd() {
        given()
                .body("{\"name\": \"Pear\", \"description\": \"Winter fruit\"}")
                .header("Content-Type", MediaType.APPLICATION_JSON)
                .when()
                .post("/fruits")
                .then()
                .statusCode(200)
                .body("$.size()", is(3),
                        "name", containsInAnyOrder("Apple", "Pineapple", "Pear"),
                        "description", containsInAnyOrder("Winter fruit", "Tropical fruit", "Winter fruit"));

        given()
                .body("{\"name\": \"Pear\", \"description\": \"Winter fruit\"}")
                .header("Content-Type", MediaType.APPLICATION_JSON)
                .when()
                .delete("/fruits")
                .then()
                .statusCode(200)
                .body("$.size()", is(2),
                        "name", containsInAnyOrder("Apple", "Pineapple"),
                        "description", containsInAnyOrder("Winter fruit", "Tropical fruit"));
    }
}

公开 OpenAPI 规范

Quarkus 提供了符合 MicroProfile OpenAPI 规范的 SmallRye OpenAPI 扩展,用于生成您的 API OpenAPI v3 规范

您只需将 openapi 扩展添加到您的 Quarkus 应用程序中

CLI
quarkus extension add quarkus-smallrye-openapi
Maven
./mvnw quarkus:add-extension -Dextensions='quarkus-smallrye-openapi'
Gradle
./gradlew addExtension --extensions='quarkus-smallrye-openapi'

这会将以下内容添加到您的构建文件中

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-smallrye-openapi</artifactId>
</dependency>
build.gradle
implementation("io.quarkus:quarkus-smallrye-openapi")

现在,我们可以运行我们的应用程序了

CLI
quarkus dev
Maven
./mvnw quarkus:dev
Gradle
./gradlew --console=plain quarkusDev

应用程序启动后,您可以向默认的 /q/openapi 端点发出请求

$ curl https://:8080/q/openapi
openapi: 3.1.0
info:
  title: Generated API
  version: "1.0"
paths:
  /fruits:
    get:
      responses:
        200:
          description: OK
          content:
            application/json: {}
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Fruit'
      responses:
        200:
          description: OK
          content:
            application/json: {}
    delete:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Fruit'
      responses:
        200:
          description: OK
          content:
            application/json: {}
components:
  schemas:
    Fruit:
      properties:
        description:
          type: string
        name:
          type: string

如果您不喜欢默认的端点位置 /q/openapi,可以通过在 application.properties 中添加以下配置来更改它

quarkus.smallrye-openapi.path=/swagger

您可以使用 format 查询参数以 JSON 格式请求 OpenAPI。例如:

/q/openapi?format=json

CTRL+C 停止应用程序。

提供应用程序级别的 OpenAPI 注解

有一些 MicroProfile OpenAPI 注解可以描述全局 API 信息,例如以下内容:

  • API 标题

  • API 描述

  • 版本

  • 联系信息

  • 许可

所有这些信息(以及更多)都可以通过在 Jakarta REST Application 类上使用适当的 OpenAPI 注解包含在您的 Java 代码中。由于 Quarkus 中不需要 Jakarta REST Application 类,因此您可能需要创建一个。它可以简单地是一个扩展 jakarta.ws.rs.core.Application 的空类。然后,可以使用各种 OpenAPI 注解(如 @OpenAPIDefinition)来注解这个空类。例如:

@OpenAPIDefinition(
    tags = {
            @Tag(name="widget", description="Widget operations."),
            @Tag(name="gasket", description="Operations related to gaskets")
    },
    info = @Info(
        title="Example API",
        version = "1.0.1",
        contact = @Contact(
            name = "Example API Support",
            url = "http://exampleurl.com/contact",
            email = "techsupport@example.com"),
        license = @License(
            name = "Apache 2.0",
            url = "https://apache.ac.cn/licenses/LICENSE-2.0.html"))
)
public class ExampleApiApplication extends Application {
}

另一种选择是利用 SmallRye 提供的功能(而非规范的一部分)通过配置来添加这些全局 API 信息。这样,您就不需要 Jakarta REST Application 类,并且可以为每个环境命名不同的 API。

例如,将以下内容添加到您的 application.properties 文件中:

quarkus.smallrye-openapi.info-title=Example API
%dev.quarkus.smallrye-openapi.info-title=Example API (development)
%test.quarkus.smallrye-openapi.info-title=Example API (test)
quarkus.smallrye-openapi.info-version=1.0.1
quarkus.smallrye-openapi.info-description=Just an example service
quarkus.smallrye-openapi.info-terms-of-service=Your terms here
quarkus.smallrye-openapi.info-contact-email=techsupport@example.com
quarkus.smallrye-openapi.info-contact-name=Example API Support
quarkus.smallrye-openapi.info-contact-url=http://exampleurl.com/contact
quarkus.smallrye-openapi.info-license-name=Apache 2.0
quarkus.smallrye-openapi.info-license-url=https://apache.ac.cn/licenses/LICENSE-2.0.html

这将提供与上面 @OpenAPIDefinition 示例类似的信息。

使用过滤器增强 OpenAPI 架构

您可以使用一个或多个过滤器来更改生成的 OpenAPI 架构。过滤器可以在构建时或运行时运行。

/**
 * Filter to add custom elements
 */
@OpenApiFilter(OpenApiFilter.RunStage.BUILD) (1)
public class MyBuildTimeFilter implements OASFilter { (2)

    private IndexView view;

    public MyBuildTimeFilter(IndexView view) { (3)
        this.view = view;
    }

    @Override
    public void filterOpenAPI(OpenAPI openAPI) { (4)
        Collection<ClassInfo> knownClasses = this.view.getKnownClasses();
        Info info = OASFactory.createInfo();
        info.setDescription("Created from Annotated Buildtime filter with " + knownClasses.size() + " known indexed classes");
        openAPI.setInfo(info);
    }

}
1 @OpenApiFilter 注解方法,并指定运行阶段(BUILD、RUN、BOTH)
2 实现 OASFilter 并覆盖任何方法
3 对于构建阶段过滤器,可以传入索引(可选)
4 获取生成的 OpenAPI 架构,并根据需要进行增强

请记住,设置架构字段会覆盖已生成的内容,您可能需要获取并添加(即修改)。另外,请注意生成的值可能为 null,因此您需要对其进行检查。

运行时过滤器

运行时过滤器默认在启动时运行(当最终的 OpenAPI 文档创建时)。您可以将运行时过滤器更改为每次请求都运行,从而使 OpenAPI 文档动态化。要实现此目的,您需要设置此属性:quarkus.smallrye-openapi.always-run-filter=true

从静态文件加载 OpenAPI 架构

Quarkus 支持服务静态 OpenAPI 文档,而不是动态地从注解扫描生成 OpenAPI 架构。要服务的静态文件必须是一个符合 OpenAPI 规范的有效文档。符合 OpenAPI 规范的 OpenAPI 文档本身就是一个有效的 JSON 对象,可以表示为 yamljson 格式。

为了实际演示这一点,我们将把 OpenAPI 文档放在 META-INF/openapi.yaml 下,用于我们的 /fruits 端点。如果您喜欢,Quarkus 也支持备用的 OpenAPI 文档路径

openapi: 3.1.0
info:
  title: Static OpenAPI document of fruits resource
  description: Fruit resources Open API documentation
  version: "1.0"

servers:
  - url: https://:8080/q/openapi
    description: Optional dev mode server description

paths:
  /fruits:
    get:
      responses:
        200:
          description: OK - fruits list
          content:
            application/json: {}
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Fruit'
      responses:
        200:
          description: new fruit resource created
          content:
            application/json: {}
    delete:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Fruit'
      responses:
        200:
          description: OK - fruit resource deleted
          content:
            application/json: {}
components:
  schemas:
    Fruit:
      properties:
        description:
          type: string
        name:
          type: string

默认情况下,对 /q/openapi 的请求将服务于静态文件和从应用程序端点代码生成的模型组合而成的 OpenAPI 文档。但是,我们可以通过在 application.properties 中添加 mp.openapi.scan.disable=true 配置来仅服务静态 OpenAPI 文档。

现在,对 /q/openapi 端点的请求将服务于静态 OpenAPI 文档,而不是生成的文档。

关于 OpenAPI 文档路径

Quarkus 支持存储 OpenAPI 文档的各种路径。我们建议将其放在 META-INF/openapi.yml 下。备用路径包括:

  • META-INF/openapi.yaml

  • META-INF/openapi.yml

  • META-INF/openapi.json

  • WEB-INF/classes/META-INF/openapi.yml

  • WEB-INF/classes/META-INF/openapi.yaml

  • WEB-INF/classes/META-INF/openapi.json

在开发过程中支持静态 OpenAPI 文档的实时重新加载。Quarkus 会动态地拾取您的 OpenAPI 文档的修改。

更改 OpenAPI 版本

默认情况下,当生成文档时,使用的 OpenAPI 版本将是 3.1.0。如果您使用如上所述的静态文件,将使用文件中的版本。您还可以使用以下配置在 SmallRye 中定义版本:

mp.openapi.extensions.smallrye.openapi=3.0.4

如果您的 API 需要特定版本才能通过网关,这一点可能很有用。

3.0.x3.1.x 版本之间切换 OpenAPI 版本将导致渲染的文档发生变化,以满足所选版本的需求。要了解 OpenAPI 3.0 和 3.1 之间的差异,可以从 OpenAPI Initiative 开始。

自动生成 Operation Id

Operation Id 可以使用 @Operation 注解设置,并且在许多情况下,在使用工具从模式生成客户端存根时非常有用。Operation Id 通常用作客户端存根中的方法名。在 SmallRye 中,您可以使用以下配置自动生成此 Operation Id:

mp.openapi.extensions.smallrye.operationIdStrategy=METHOD

现在您无需使用 @Operation 注解。在生成文档时,方法名将用于 Operation Id。

表 1. 生成 Operation Id 的策略
属性值 描述

METHOD

使用方法名。

CLASS_METHOD

使用类名(不含包名)加上方法名。

PACKAGE_CLASS_METHOD

使用类名加上方法名。

在开发中使用 Swagger UI

在构建 API 时,开发人员希望快速进行测试。Swagger UI 是一个非常棒的工具,可以可视化和交互式地处理您的 API。UI 是从您的 OpenAPI 规范自动生成的。

Quarkus 的 smallrye-openapi 扩展附带了一个 swagger-ui 扩展,其中嵌入了一个配置正确的 Swagger UI 页面。

默认情况下,Swagger UI 仅在 Quarkus 以开发或测试模式启动时可用。

如果您也希望在生产环境中使用它,可以在 application.properties 中包含以下配置:

quarkus.swagger-ui.always-include=true

这是一个构建时属性,在应用程序构建后无法在运行时更改。

默认情况下,Swagger UI 可在 /q/swagger-ui 访问。

您可以通过在 application.properties 中设置 quarkus.swagger-ui.path 属性来更新 /swagger-ui 的子路径。

quarkus.swagger-ui.path=my-custom-path

不允许使用 / 作为值,因为它会阻止应用程序服务其他任何内容。以 '/' 开头的值是绝对路径,而不是相对路径。

现在,我们可以运行我们的应用程序了

./mvnw quarkus:dev

您可以在应用程序的日志中查看 Swagger UI 路径。

00:00:00,000 INFO  [io.qua.swa.run.SwaggerUiServletExtension] Swagger UI available at /q/swagger-ui

应用程序启动后,您可以访问 https://:8080/q/swagger-ui 并与您的 API 进行交互。

您可以可视化 API 的操作和模式。可视化您的 API

您还可以与您的 API 进行交互,以便快速进行测试。与您的 API 交互

CTRL+C 停止应用程序。

样式

您可以通过提供自己的 logo 和 css 来设置 swagger ui 的样式。

要提供您自己的 logo,您需要将一个名为 logo.png 的文件放在 src/main/resources/META-INF/branding 目录下。

这将为所有 UI(不仅仅是 swagger ui)设置 logo,因此在这种情况下也包括 GraphQL-UI 和 Health-UI(如果已包含)。

如果您只想将此 logo 应用于 swagger-ui(而不是全局应用于所有 UI),请将文件命名为 smallrye-open-api-ui.png,而不是 logo.png

CSS

要提供您自己的 css 来覆盖/增强 html 中的样式,您需要将一个名为 style.css 的文件放在 src/main/resources/META-INF/branding 目录下。

这将把该 css 添加到所有 UI(不仅仅是 swagger ui),因此在这种情况下也包括 GraphQL-UI 和 Health-UI(如果已包含)。

如果您只想将此样式应用于 swagger-ui(而不是全局应用于所有 UI),请将文件命名为 smallrye-open-api-ui.css,而不是 style.css

有关样式的更多信息,请阅读这篇博文:https://quarkus.net.cn/blog/stylish-api/

跨域资源共享

如果您计划从运行在不同域上的单页应用程序中使用此应用程序,您将需要配置 CORS(跨域资源共享)。有关更多详细信息,请阅读“跨域资源共享”指南的CORS 过滤器部分。

配置参考

MicroProfile OpenAPI

MicroProfile OpenAPI 核心配置在 MicroProfile OpenAPI 规范中定义。有关 MicroProfile OpenAPI 注解的更多信息,请参阅 MicroProfile OpenAPI API Javadoc

OpenAPI

构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖

配置属性

类型

默认

注册 OpenAPI Servlet 的路径。

环境变量:QUARKUS_SMALLRYE_OPENAPI_PATH

显示更多

字符串

openapi

如果设置,生成的 OpenAPI 架构文档将在构建时存储在此处。如果设置了此项,openapi.json 和 openapi.yaml 都将存储在此处。

环境变量:QUARKUS_SMALLRYE_OPENAPI_STORE_SCHEMA_DIRECTORY

显示更多

path

如果正在存储文件,则为文件名。

环境变量:QUARKUS_SMALLRYE_OPENAPI_STORE_SCHEMA_FILE_NAME

显示更多

字符串

openapi

不要仅在启动时运行过滤器,而是在每次请求文档时运行(动态)。

环境变量:QUARKUS_SMALLRYE_OPENAPI_ALWAYS_RUN_FILTER

显示更多

布尔值

false

不要包含提供的静态 openapi 文档(例如 META-INF/openapi.yaml)。

环境变量:QUARKUS_SMALLRYE_OPENAPI_IGNORE_STATIC_DOCUMENT

显示更多

布尔值

false

如果启用了管理界面,openapi 架构文档将在管理界面下发布。这允许您通过将值设置为 false 来排除 OpenAPI 的管理。

环境变量:QUARKUS_SMALLRYE_OPENAPI_MANAGEMENT_ENABLED

显示更多

布尔值

true

应扫描以包含在静态模型中的 yaml 和/或 json 文件的本地目录列表。例如:META-INF/openapi/

环境变量:QUARKUS_SMALLRYE_OPENAPI_ADDITIONAL_DOCS_DIRECTORY

显示更多

路径列表

添加具有配置的特定 SecurityScheme

环境变量:QUARKUS_SMALLRYE_OPENAPI_SECURITY_SCHEME

显示更多

api-key, basic, jwt, oauth2, oidc, oauth2-implicit

为生成的 OpenAPI 文档添加 Security Scheme 名称

环境变量:QUARKUS_SMALLRYE_OPENAPI_SECURITY_SCHEME_NAME

显示更多

字符串

SecurityScheme

为 Security Scheme 添加描述

环境变量:QUARKUS_SMALLRYE_OPENAPI_SECURITY_SCHEME_DESCRIPTION

显示更多

字符串

身份验证

向安全方案添加一个或多个扩展

环境变量:QUARKUS_SMALLRYE_OPENAPI_SECURITY_SCHEME_EXTENSIONS__EXTENSION_NAME_

显示更多

Map<String,String>

这将自动将安全要求添加到所有具有 RolesAllowed 注解的方法/类中。

环境变量:QUARKUS_SMALLRYE_OPENAPI_AUTO_ADD_SECURITY_REQUIREMENT

显示更多

布尔值

true

这将根据 Java 类名自动为操作添加标签。

环境变量:QUARKUS_SMALLRYE_OPENAPI_AUTO_ADD_TAGS

显示更多

布尔值

true

这将自动为具有输入的 API 操作添加 Bad Request(400 HTTP 响应)API 响应。

环境变量:QUARKUS_SMALLRYE_OPENAPI_AUTO_ADD_BAD_REQUEST_RESPONSE

显示更多

布尔值

true

这将根据 Java 方法名自动为操作添加摘要。

环境变量:QUARKUS_SMALLRYE_OPENAPI_AUTO_ADD_OPERATION_SUMMARY

显示更多

布尔值

true

将其设置为 true 将在未提供服务器的情况下自动添加默认服务器,使用当前正在运行的服务器主机和端口。

环境变量:QUARKUS_SMALLRYE_OPENAPI_AUTO_ADD_SERVER

显示更多

布尔值

这将根据包含的安全扩展(如果有)自动添加安全性。

环境变量:QUARKUS_SMALLRYE_OPENAPI_AUTO_ADD_SECURITY

显示更多

布尔值

true

这将自动将 OpenAPI 规范文档端点添加到架构中。它还将“openapi”添加到标签列表中并指定“operationId”。

环境变量:QUARKUS_SMALLRYE_OPENAPI_AUTO_ADD_OPEN_API_ENDPOINT

显示更多

布尔值

false

使用 apiKey 安全时必需。API 密钥的位置。有效值为“query”、“header”或“cookie”。

环境变量:QUARKUS_SMALLRYE_OPENAPI_API_KEY_PARAMETER_IN

显示更多

字符串

使用 apiKey 安全时必需。要使用的 header、query 或 cookie 参数的名称。

环境变量:QUARKUS_SMALLRYE_OPENAPI_API_KEY_PARAMETER_NAME

显示更多

字符串

向 Basic HTTP Security Scheme 添加一个 scheme 值

环境变量:QUARKUS_SMALLRYE_OPENAPI_BASIC_SECURITY_SCHEME_VALUE

显示更多

字符串

basic

向 JWT Security Scheme 添加一个 scheme 值

环境变量:QUARKUS_SMALLRYE_OPENAPI_JWT_SECURITY_SCHEME_VALUE

显示更多

字符串

bearer

向 JWT Security Scheme 添加一个 bearer 格式

环境变量:QUARKUS_SMALLRYE_OPENAPI_JWT_BEARER_FORMAT

显示更多

字符串

JWT

向 OAuth2 opaque token Security Scheme 添加一个 scheme 值

环境变量:QUARKUS_SMALLRYE_OPENAPI_OAUTH2_SECURITY_SCHEME_VALUE

显示更多

字符串

bearer

向 OAuth2 opaque token Security Scheme 添加一个 scheme 值

环境变量:QUARKUS_SMALLRYE_OPENAPI_OAUTH2_BEARER_FORMAT

显示更多

字符串

Opaque

向 OIDC Security Scheme 添加一个 openIdConnectUrl 值

环境变量:QUARKUS_SMALLRYE_OPENAPI_OIDC_OPEN_ID_CONNECT_URL

显示更多

字符串

向 OAuth2 Security Scheme 添加一个隐式流 refreshUrl 值

环境变量:QUARKUS_SMALLRYE_OPENAPI_OAUTH2_IMPLICIT_REFRESH_URL

显示更多

字符串

向 OAuth2 Security Scheme 添加一个隐式流 authorizationUrl 值

环境变量:QUARKUS_SMALLRYE_OPENAPI_OAUTH2_IMPLICIT_AUTHORIZATION_URL

显示更多

字符串

向 OAuth2 Security Scheme 添加一个隐式流 tokenUrl 值

环境变量:QUARKUS_SMALLRYE_OPENAPI_OAUTH2_IMPLICIT_TOKEN_URL

显示更多

字符串

覆盖 Schema 文档中的 openapi 版本

环境变量:QUARKUS_SMALLRYE_OPENAPI_OPEN_API_VERSION

显示更多

字符串

设置 Schema 文档中 Info 标签的标题

环境变量:QUARKUS_SMALLRYE_OPENAPI_INFO_TITLE

显示更多

字符串

设置 Schema 文档中 Info 标签的版本

环境变量:QUARKUS_SMALLRYE_OPENAPI_INFO_VERSION

显示更多

字符串

设置 Schema 文档中 Info 标签的描述

环境变量:QUARKUS_SMALLRYE_OPENAPI_INFO_DESCRIPTION

显示更多

字符串

设置 Schema 文档中 Info 标签的服务条款

环境变量:QUARKUS_SMALLRYE_OPENAPI_INFO_TERMS_OF_SERVICE

显示更多

字符串

设置 Schema 文档中 Info 标签的联系邮箱

环境变量:QUARKUS_SMALLRYE_OPENAPI_INFO_CONTACT_EMAIL

显示更多

字符串

设置 Schema 文档中 Info 标签的联系人姓名

环境变量:QUARKUS_SMALLRYE_OPENAPI_INFO_CONTACT_NAME

显示更多

字符串

设置 Schema 文档中 Info 标签的联系人 URL

环境变量:QUARKUS_SMALLRYE_OPENAPI_INFO_CONTACT_URL

显示更多

字符串

设置 Schema 文档中 Info 标签的许可证名称

环境变量:QUARKUS_SMALLRYE_OPENAPI_INFO_LICENSE_NAME

显示更多

字符串

设置 Schema 文档中 Info 标签的许可证 URL

环境变量:QUARKUS_SMALLRYE_OPENAPI_INFO_LICENSE_URL

显示更多

字符串

设置自动创建 operation Id 的策略

环境变量:QUARKUS_SMALLRYE_OPENAPI_OPERATION_ID_STRATEGY

显示更多

method, class-method, package-class-method

将此布尔值设置为 true 或 false 以启用或禁用已弃用的 @Schema example 属性到 OAS 3.1.0 中引入的 examples 数组的合并。如果设置为 false,则已弃用的 example 将作为架构上的单独注解保留在 OpenAPI 模型中。

环境变量:QUARKUS_SMALLRYE_OPENAPI_MERGE_SCHEMA_EXAMPLES

显示更多

布尔值

true

启用 openapi 端点。默认情况下它是启用的。

环境变量:QUARKUS_SMALLRYE_OPENAPI_ENABLE

显示更多

布尔值

true

指定提供连接信息的全局服务器列表

环境变量:QUARKUS_SMALLRYE_OPENAPI_SERVERS

显示更多

字符串列表

Swagger UI

构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖

配置属性

类型

默认

Swagger UI 可用的路径。

不允许使用 / 作为值,因为它会阻止应用程序服务其他任何内容。默认情况下,此值将解析为相对于 ${quarkus.http.non-application-root-path} 的路径。

环境变量:QUARKUS_SWAGGER_UI_PATH

显示更多

字符串

swagger-ui

是否应始终包含此项。默认情况下,仅在应用程序以开发模式运行时包含此项。

环境变量:QUARKUS_SWAGGER_UI_ALWAYS_INCLUDE

显示更多

布尔值

false

将包含为选项的 URL。默认情况下,将使用 OpenAPI 路径。您可以在此处覆盖它,并提供多个 URL,这些 URL 将出现在 TopBar 插件中。

环境变量:QUARKUS_SWAGGER_UI_URLS__NAME_

显示更多

Map<String,String>

如果使用 urls 选项,这将是默认选中的名称。

环境变量:QUARKUS_SWAGGER_UI_URLS_PRIMARY_NAME

显示更多

字符串

页面的 html 标题。

环境变量:QUARKUS_SWAGGER_UI_TITLE

显示更多

字符串

要使用的 Swagger UI 主题。

环境变量:QUARKUS_SWAGGER_UI_THEME

显示更多

original, feeling-blue, flattop, material, monokai, muted, newspaper, outline

html 页面的页脚。默认无。

环境变量:QUARKUS_SWAGGER_UI_FOOTER

显示更多

字符串

如果设置为 true,则为标签和操作启用深度链接。

环境变量:QUARKUS_SWAGGER_UI_DEEP_LINKING

显示更多

布尔值

控制在操作列表中显示 operationId。默认值为 false。

环境变量:QUARKUS_SWAGGER_UI_DISPLAY_OPERATION_ID

显示更多

布尔值

模式的默认展开深度(设置为 -1 以完全隐藏模式)。

环境变量:QUARKUS_SWAGGER_UI_DEFAULT_MODELS_EXPAND_DEPTH

显示更多

整数

模型示例部分中模型的默认展开深度。

环境变量:QUARKUS_SWAGGER_UI_DEFAULT_MODEL_EXPAND_DEPTH

显示更多

整数

控制 API 首次渲染时模式的显示方式。

环境变量:QUARKUS_SWAGGER_UI_DEFAULT_MODEL_RENDERING

显示更多

字符串

控制“尝试使用”请求的请求时长(以毫秒为单位)的显示。

环境变量:QUARKUS_SWAGGER_UI_DISPLAY_REQUEST_DURATION

显示更多

布尔值

控制每个 API 的操作和标签的默认展开设置。

环境变量:QUARKUS_SWAGGER_UI_DOC_EXPANSION

显示更多

list, full, none

如果设置,则启用过滤。顶栏将显示一个编辑框,您可以使用它来过滤显示的已标记操作。可以是布尔值来启用或禁用,也可以是字符串,在这种情况下,将使用该字符串作为过滤表达式来启用过滤。过滤区分大小写,匹配标签内的任何位置的过滤表达式。

环境变量:QUARKUS_SWAGGER_UI_FILTER

显示更多

字符串

如果设置,将已标记的操作显示数量限制为最多此数量。默认是显示所有操作。

环境变量:QUARKUS_SWAGGER_UI_MAX_DISPLAYED_TAGS

显示更多

整数

对每个 API 的操作列表应用排序。可以是“alpha”(按路径字母数字排序)、“method”(按 HTTP 方法排序)或函数(有关排序函数的工作原理,请参阅 Array.prototype.sort())。默认是服务器返回的顺序不变。

环境变量:QUARKUS_SWAGGER_UI_OPERATIONS_SORTER

显示更多

字符串

控制操作、参数和模式的供应商扩展(x-)字段和值的显示。

环境变量:QUARKUS_SWAGGER_UI_SHOW_EXTENSIONS

显示更多

布尔值

控制参数的扩展(pattern、maxLength、minLength、maximum、minimum)字段和值的显示。

环境变量:QUARKUS_SWAGGER_UI_SHOW_COMMON_EXTENSIONS

显示更多

布尔值

对每个 API 的标签列表应用排序。可以是“alpha”(按路径字母数字排序)或函数(有关如何编写排序函数,请参阅 Array.prototype.sort())。每次传递给排序器时,都会传递两个标签名称字符串。默认是 Swagger UI 确定的顺序。

环境变量:QUARKUS_SWAGGER_UI_TAGS_SORTER

显示更多

字符串

提供一种机制,以便在 Swagger UI 完成渲染新提供的定义时得到通知。

环境变量:QUARKUS_SWAGGER_UI_ON_COMPLETE

显示更多

字符串

设置为 false 以禁用有效负载和 cURL 命令的语法高亮。否则可以是一个对象,其中包含 activatetheme 属性。

环境变量:QUARKUS_SWAGGER_UI_SYNTAX_HIGHLIGHT

显示更多

字符串

OAuth 重定向 URL。

环境变量:QUARKUS_SWAGGER_UI_OAUTH2_REDIRECT_URL

显示更多

字符串

必须是函数。用于拦截远程定义、“尝试使用”和 OAuth 2.0 请求的函数。接受一个参数 requestInterceptor(request),并且必须返回修改后的请求,或者返回解析为修改后请求的 Promise。

环境变量:QUARKUS_SWAGGER_UI_REQUEST_INTERCEPTOR

显示更多

字符串

如果设置,则必须是 curl 命令的可用命令行选项数组。可以在 requestInterceptor 函数中针对修改后的请求进行设置。

环境变量:QUARKUS_SWAGGER_UI_REQUEST_CURL_OPTIONS

显示更多

字符串列表

必须是函数。用于拦截远程定义、“尝试使用”和 OAuth 2.0 响应的函数。接受一个参数 responseInterceptor(response),并且必须返回修改后的响应,或者返回解析为修改后响应的 Promise。

环境变量:QUARKUS_SWAGGER_UI_RESPONSE_INTERCEPTOR

显示更多

字符串

如果设置为 true,则使用从 requestInterceptor 返回的修改后的请求在 UI 中生成 curl 命令,否则使用应用 requestInterceptor 之前的请求。

环境变量:QUARKUS_SWAGGER_UI_SHOW_MUTATED_REQUEST

显示更多

布尔值

启用“尝试使用”功能的 HTTP 方法列表。空数组将禁用所有操作的“尝试使用”。这不会过滤显示的操作。

环境变量:QUARKUS_SWAGGER_UI_SUPPORTED_SUBMIT_METHODS

显示更多

get, put, post, delete, options, head, patch, trace 列表

默认情况下,Swagger UI 会尝试将规范与 swagger.io 的在线验证器进行验证。您可以使用此参数设置不同的验证器 URL,例如本地部署的验证器(Validator Badge)。将其设置为 none、127.0.0.1 或 localhost 将禁用验证。

环境变量:QUARKUS_SWAGGER_UI_VALIDATOR_URL

显示更多

字符串

如果设置为 true,则在浏览器发送的 CORS 请求中启用传递凭据(如 Fetch 标准中所定义)。

环境变量:QUARKUS_SWAGGER_UI_WITH_CREDENTIALS

显示更多

布尔值

用于为模型中的每个属性设置默认值的函数。接受一个参数 modelPropertyMacro(property),property 是不可变的。

环境变量:QUARKUS_SWAGGER_UI_MODEL_PROPERTY_MACRO

显示更多

字符串

用于为参数设置默认值的函数。接受两个参数 parameterMacro(operation, parameter)。Operation 和 parameter 是用于上下文的对象,两者都保持不变。

环境变量:QUARKUS_SWAGGER_UI_PARAMETER_MACRO

显示更多

字符串

如果设置为 true,它将持久化授权数据,这样在浏览器关闭/刷新时不会丢失。

环境变量:QUARKUS_SWAGGER_UI_PERSIST_AUTHORIZATION

显示更多

布尔值

通过插件系统可用的组件名称,用作 Swagger UI 的顶层布局。

环境变量:QUARKUS_SWAGGER_UI_LAYOUT

显示更多

字符串

将在 Swagger UI 中使用的插件函数列表。

环境变量:QUARKUS_SWAGGER_UI_PLUGINS

显示更多

字符串列表

将在 Swagger UI 中使用的外部脚本(通常是插件)列表。

环境变量:QUARKUS_SWAGGER_UI_SCRIPTS

显示更多

字符串列表

将在 Swagger UI 中使用的预设列表。

环境变量:QUARKUS_SWAGGER_UI_PRESETS

显示更多

字符串列表

OAuth 默认 clientId - 在 initOAuth 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_OAUTH_CLIENT_ID

显示更多

字符串

OAuth 默认 clientSecret - 在 initOAuth 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_OAUTH_CLIENT_SECRET

显示更多

字符串

OAuth1 Realm 查询参数,添加到 authorizationUrl 和 tokenUrl - 在 initOAuth 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_OAUTH_REALM

显示更多

字符串

OAuth 应用程序名称,显示在授权弹出窗口中 - 在 initOAuth 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_OAUTH_APP_NAME

显示更多

字符串

用于传递范围的 OAuth 范围分隔符 - 在 initOAuth 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_OAUTH_SCOPE_SEPARATOR

显示更多

字符串

OAuth 范围,使用 oauthScopeSeparator 分隔 - 在 initOAuth 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_OAUTH_SCOPES

显示更多

字符串

OAuth 附加的查询参数,添加到 authorizationUrl 和 tokenUrl - 在 initOAuth 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_OAUTH_ADDITIONAL_QUERY_STRING_PARAMS

显示更多

字符串

OAuth 仅激活于 accessCode 流程。在向 tokenUrl 发送 authorization_code 请求时,使用 HTTP Basic Authentication 方案传递 Client Password - 在 initOAuth 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_OAUTH_USE_BASIC_AUTHENTICATION_WITH_ACCESS_CODE_GRANT

显示更多

布尔值

OAuth 仅适用于授权码流程。Proof Key for Code Exchange 为 OAuth 公共客户端提供了增强的安全性 - 在 initOAuth 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_OAUTH_USE_PKCE_WITH_AUTHORIZATION_CODE_GRANT

显示更多

布尔值

预授权 Basic Auth,以编程方式为 Basic 授权方案设置 DefinitionKey - 在 preauthorizeBasic 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_PREAUTHORIZE_BASIC_AUTH_DEFINITION_KEY

显示更多

字符串

预授权 Basic Auth,以编程方式为 Basic 授权方案设置用户名 - 在 preauthorizeBasic 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_PREAUTHORIZE_BASIC_USERNAME

显示更多

字符串

预授权 Basic Auth,以编程方式为 Basic 授权方案设置密码 - 在 preauthorizeBasic 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_PREAUTHORIZE_BASIC_PASSWORD

显示更多

字符串

预授权 ApiKey Auth,以编程方式为 API 密钥或 Bearer 授权方案设置 DefinitionKey - 在 preauthorizeApiKey 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_PREAUTHORIZE_API_KEY_AUTH_DEFINITION_KEY

显示更多

字符串

预授权 ApiKey Auth,以编程方式为 API 密钥或 Bearer 授权方案设置 ApiKeyValue - 在 preauthorizeApiKey 方法中使用。

环境变量:QUARKUS_SWAGGER_UI_PREAUTHORIZE_API_KEY_API_KEY_VALUE

显示更多

字符串

如果设置为 true,这允许用户修改和测试 API 请求中的不同查询参数。

环境变量:QUARKUS_SWAGGER_UI_QUERY_CONFIG_ENABLED

显示更多

布尔值

false

是否默认启用“尝试使用”。

环境变量:QUARKUS_SWAGGER_UI_TRY_IT_OUT_ENABLED

显示更多

布尔值

false

如果 Swagger UI 已包含,则应启用/禁用它。默认情况下,如果 Swagger UI 已包含(请参阅 always-include),则它将被启用。

环境变量:QUARKUS_SWAGGER_UI_ENABLE

显示更多

布尔值

true

相关内容