当前位置: 首页 > 知识库问答 >
问题:

用于值验证的远程枚举列表-在OpenAPI规范中

充昌勋
2023-03-14

我试图在OpenAPI 3.0.2规范中定义模式。我希望其中一个属性对值列表进行验证。

通常情况下,我可以使用enum执行此操作。

components:
  schemas:
    catalog:
      title: title here
      description: describing it here
      properties:
        catalogitemid:
          description: catalog identifier
          type: string
          enum: 
            - item1347
            - item9081
            - item5720
        catalogitemname:
          description: catalog item name
          type: string
      required:
        - catalogitemid
        - catalogitemname
      additionalProperties: false

但是我希望这个枚举列表是一个远程YAML/JSON。

原因:此列表需要定期更新(2000个值)。我想避免这迫使更新这个应用编程接口。

低于$ref的方法失败:

components:
  schemas:
    catalog:
      title: title here
      description: describing it here
      properties:
        catalogitemid:
          description: catalog identifier
          type: string
          enum:
            $ref: 'https://remote/path/to/catalog/list.yaml#/components/schemas/catalogitemid/enum'
        catalogitemname:
          description: catalog item name
          type: string
      required:
        - catalogitemid
        - catalogitemname
      additionalProperties: false

错误:

目录原因

应该有所需的属性$ref

missingProperty:$ref

应该完全匹配一个架构中的一个

和行enum原因

应该是数组

有什么方法可以做到这一点?

共有1个答案

丁宏盛
2023-03-14

OpenAPI规范只允许在某些上下文中使用$ref,而不是在任何地方。不能仅使用$ref枚举值列表,但可以$ref整个属性架构:

# This won't work
enum:
  $ref: 'https://...'

# This will work
properties:
  catalogitemid:
    $ref: 'https://remote/path/to/enums/catalog-list.yaml'

上面的示例假设列表。yaml文件包含:

description: catalog identifier
type: string
enum: 
  - item1347
  - item9081
  - item5720
  ...

也就是说,有json refs或openapi预处理器等工具可以解析文档中任何位置的json引用和json指针。您可以使用它们预处理问题中的原始规范,这将生成一个有效的已解析OpenAPI定义,然后可以与符合OpenAPI的工具一起使用。

 类似资料:
  • 我的JPA实体作为枚举字段 哪里 如果我用规范添加where条件 将枚举包含到规范查询中的正确方法是什么?

  • 我有一个从swagger 2.0更新到openapi 3.0.0的yaml规范。 文件本身大约有 7,000 行,因此手动验证具有挑战性。 我需要找出哪些标记不再与openapi 3.0.0兼容。如何验证我的模式?有没有我可以使用的命令行工具? 我不想将此代码复制/粘贴到在线某个地方,因为我不想公开所有路由。

  • 问题内容: 是否可以创建枚举值的ArrayList(并对其进行操作)?例如: 问题答案: 是的,绝对有可能,但是您必须这样做 然后,您可以将元素添加到:或。

  • 问题内容: 以下哪项将被认为是更好/更清晰/更快/更多的“ Pythonic”?我不在乎列表的内容,只关心它的持续时间。 要么 如果有什么不同,该函数也会利用。 问题答案: 一些快速的计时运行似乎使第二个选项略有优势: 只是为了好玩而已(Python v2.7.2) 我希望 首先 使用 可读代码 ,然后使用(如果可用)(例如,Python 3.x之前的版本),然后使用和。

  • 问题内容: 我有一个枚举的类对象(我有一个),我需要获取此枚举表示的枚举值的列表。该静态函数有我需要什么,但我不知道怎么去从类对象访问它。 问题答案:

  • 我有多个请求体需要使用相同的枚举,但我很难跨多个模式引用单个定义。 在我的< code>openapi.yaml文件中,我包含了: 在我为 POST/PUT 请求设置的正文定义中,我包括: 但在生成的代码中,正在创建的是: 而一个单独的类是使用以下命令创建的: 如何跨文件创建对枚举定义的引用?