标签: openapi

使用 Swagger/OpenAPI 扩展 JSON 元数据

I\xe2\x80\x99m 正在寻找一种方法来声明 API 中使用的 JSON 对象的扩展元数据,该 API 使用 Swagger/OpenAPI 指定(或者类似的东西,如果有其他格式支持所请求的功能)。

\n\n

这个想法是使用此元数据自动/部分生成用于编辑此数据的用户界面。

\n\n

请求的功能列表:

\n\n
    \n
  • 对用户可读信息的多语言支持,例如名称、描述、占位符、示例\xe2\x80\x93 API 规范本身的名称和描述可能与最终用户\n例如 CRUD 编辑器应看到的不同。

  • \n
  • 验证元数据
    \n我知道 Swagger/OpenAPI 中有各种字段,例如最小值、最大值、模式等。 \xe2\x80\x93 但无法为验证指定特定的(多语言)错误消息(类似于 \xe2\ x80\x9cA 用户名只能由字母\n和数字\xe2\x80\x9d 以及多种语言的翻译组成。或者\n要匹配的多个模式(每个错误消息都与之相关)。

    \n\n

    另一种验证方法可能是单独的 API 调用(例如\n检查电子邮件或用户名是否可用)

  • \n
  • 关系元数据 例如,ID 字段实际上引用另一个对象的 ID(具有其自己的元数据)。

  • \n
\n

validation json metadata swagger openapi

3
推荐指数
1
解决办法
1948
查看次数

OpenAPI / JSON Schema 中的多重继承/组合

在 OpenAPI 中,继承是通过allof. 例如,在这个例子中:

\n\n
  "definitions": {\n    "Pet": {\n      "type": "object",\n      "allOf": [\n        {\n          "$ref": "#/definitions/NewPet"   #\xc2\xa0<--- here\n        },\n        [...]\n      ]\n    },\n    "NewPet": {\n      "type": "object",\n      "properties": {\n        "name": {\n          "type": "string"\n        },\n      }\n    },\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在规范中没有找到有关多重继承的任何内容。例如,如果 Pet 继承自 NewPet 和 OldPet。

\n\n

在Python中,我会写

\n\n
class Pet(NewPet, OldPet):\n    ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且方法解析顺序确定了应该首先检查哪个父类的方法/属性,因此我可以判断 Pet.age 是 NewPet.age 还是 OldPet.age。

\n\n

那么,如果我让 Pet 继承 NewPet 和 OldPet,其中 name 属性在两个模式中都定义,并且每个模式具有不同的值,会怎样呢?宠物名称是什么?

\n\n
  "definitions": {\n    "Pet": {\n      "type": "object",\n      "allOf": [\n        {\n          "$ref": …
Run Code Online (Sandbox Code Playgroud)

multiple-inheritance jsonschema swagger openapi

3
推荐指数
1
解决办法
4846
查看次数

OpenAPI 3.0 模拟生成器

我正在学习 OpenAPI 规范。是否有任何工具可以基于 YAML 格式的 OpenAPI 定义来模拟 API?

api-design mocking swagger openapi

3
推荐指数
1
解决办法
5362
查看次数

springdoc-openapi 使用泛型继承的规范生成

我有一个 Spring Boot (kotlin) 项目,我使用 springdoc-openapi 来生成 OpenApi 3 规范。我的数据模型如下所示:

open class Animal
data class Cat(val catName: String) : Animal()
data class Dog(val dogName: String) : Animal()

open class Food<T : Animal>
class CatFood : Food<Cat>()
class DogFood : Food<Dog>()
Run Code Online (Sandbox Code Playgroud)

和一个像这样的简单控制器:

@GetMapping("/test")
fun test(): Food<out Animal> = DogFood()
Run Code Online (Sandbox Code Playgroud)

生成的 yaml 是:

openapi: 3.0.1
info:
  title: OpenAPI definition
  version: v0
servers:
- url: http://localhost:8085
paths:
  /test:
    get:
      tags:
      - test-controller
      operationId: test
      responses:
        "200":
          description: default response
          content:
            '*/*':
              schema:
                $ref: …
Run Code Online (Sandbox Code Playgroud)

swagger springfox openapi springdoc

3
推荐指数
1
解决办法
2669
查看次数

带有 Django drf 的 Openapi 3

我正在使用 Django 和 Django-Drf 来编写一个宁静的 BE。

我还使用 drf-yasg 为我的服务生成 swagger 方案。

不幸的是,drf-yasg 尚不支持 OpenApi3,而且在可预见的未来看起来也不会。

是否有 drf-yasg 的替代方案,它确实支持我可以与 Django-Drf 一起使用的 Openapi 3?

django swagger django-rest-framework openapi drf-yasg

3
推荐指数
1
解决办法
2086
查看次数

如何为 Kotlin 数据类中的属性设置 OpenAPI 类型/架构

在使用 Kotlin 的 Microprofile / Quarkus 项目中,有一个数据类,其变量类型为 Instant。

@Schema(name = "Vehicle", description = "POJO that represents a vehicle at a specific time.")
data class VehicleDTO(
    var time: Instant = Instant.EPOCH
)
Run Code Online (Sandbox Code Playgroud)

问题是生成的openapi schema并不能代表Instant的值是如何实际传输的。

架构如下所示,而它只是简单地表示为这样的字符串: 2015-06-02T21:34:33.616Z.

Instant:
  type: object
  properties:
    nanos:
      format: int32
      type: integer
    seconds:
      format: int64
      type: integer
    epochSecond:
      format: int64
      type: integer
    nano:
      format: int32
      type: integer
Run Code Online (Sandbox Code Playgroud)

我已经尝试注释数据类以使用实现字符串和类型字符串,但它没有改变任何东西。

@Schema(name = "Vehicle", description = "POJO that represents a vehicle at a specific time.")
data class VehicleDTO(
    @Schema(implementation = String::class, …
Run Code Online (Sandbox Code Playgroud)

kotlin openapi microprofile quarkus

3
推荐指数
1
解决办法
654
查看次数

如何更改 Swagger 默认 URL 并使用自定义 URL?

我有一个在 .NetCore 3.1 中创建的 API,并使用 Swashbuckle 启用了 Swagger(OAS3)。默认情况下,当我的应用程序启动时,如果使用此 URL 显示 Swagger 页面:

http://{port}/swagger.index.html
Run Code Online (Sandbox Code Playgroud)

我想自定义 Swagger URL,以便它包含正在运行的应用程序的名称。我这样做的原因是我在 AWS Fargate 中运行 Nginx 时使用基于路径的路由。

我将在 Fargate 任务中运行多个 API 容器,Nginx 将接收来自应用程序负载均衡器和路径(例如 /api/app1)的 REST 请求,它将请求路由到目标应用程序的正确容器端口.

例如,我有三个应用程序:端口 5000 上的 App1、端口 5001 上的 App2 和端口 5003 上的 App3。

如果用户向https://api/app1发出请求,Nginx 将检测路径并将请求转发到端口 5000,这是 App1 的容器端口。

但是,为了确保出现正确的 Swagger 页面,我需要在 Swagger 的 URL 中添加“api/App1”,以便 Nginx 将请求转发到正确的容器。在本例中,它是 App1。

换句话说,我希望我的 Swagger URL 看起来像这样:

https://api/app1/swagger/index.html
Run Code Online (Sandbox Code Playgroud)

我试过的

在我的 Startup.cs 文件中,我添加了以下内容:


// Define prefix for application
private readonly string baseApplicationRoute = "api/app1";

            // Enable …
Run Code Online (Sandbox Code Playgroud)

c# swagger swashbuckle asp.net-core openapi

3
推荐指数
1
解决办法
1万
查看次数

如何在 Swagger (OpenApi) 中添加 JSON 请求和响应示例?

我的 Symfony 4 应用程序中有一个 API 端点,我想用 NelmioApiDocBundle 和 Swagger 记录它。端点将 JSON 作为请求数据,并返回一些自定义 JSON 作为响应。如何使用注释将它们的示例添加到文档中?我在文档页面上看不到任何示例,只有描述。

/**
 * @Route("/order/import", methods={"POST"}, name="order_import")
 * @OA\RequestBody (
 *     request="order",
 *     description="Order data in JSON format",
 *     @OA\Schema(
 *        type="object",
 *        example={"hello": "world"}
 *     )
 * )
 * @OA\Response(
 *     response=200,
 *     description="Returns the JSON data after import",
 *     @OA\Schema(
 *        type="object",
 *        example={"foo": "bar"}
 *     )
 * )
 * @OA\Tag(name="import")
Run Code Online (Sandbox Code Playgroud)

symfony swagger swagger-ui nelmioapidocbundle openapi

3
推荐指数
1
解决办法
1984
查看次数

如何从我的 openapi swagger 中删除“api-resource-controller”

我目前正在使用以下openapi-ui依赖项。

    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.4.4</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

如何从openapi-ui swagger屏幕中删除api-resource-controller

在此处输入图片说明

java swagger-ui spring-boot openapi springdoc-openapi-ui

3
推荐指数
2
解决办法
1031
查看次数

使用带有 Lombok 注释的 OpenAPI 生成器生成 POJO

我正在使用如下所示的 OpenAPI 生成器 maven 插件来为模型生成 Java 客户端代码。

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>4.3.1</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.basedir}/src/main/resources/api.yaml</inputSpec>
                <generatorName>java</generatorName>
                <configOptions>
                   <sourceFolder>src/gen/java/main</sourceFolder>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

当 ,我生成模型类时,它们使用通常的 POJO 字段声明以及 getter 和 setter 生成。但我想做的是,而不是生成getter和setter方法,我想我的类与龙目岛标注为Java的POJO以获得更多信息自动生成@Getter@Setter@Data,等有没有一种方法来定制模型生成器,以适应上述用例的要求?

我试图找出是否有办法。我找到了这个讨论,最后一条评论谈到了PR,其中使用 Lombok 注释生成模型的问题已得到解决。但是我在 OpenAPI 生成器开源项目中没有看到任何明确的使用说明或任何关于此功能的文档,说明它尚未实现。那么,今天有没有办法用 Lombok 注释而不是常规的 getter 和 setter 生成模型?

java swagger spring-boot openapi openapi-generator

3
推荐指数
1
解决办法
2030
查看次数