gpt4 book ai didi

json - openAPI 无法解析对外部文件的引用。组件名称包含无效字符

转载 作者:行者123 更新时间:2023-12-03 08:04:55 24 4
gpt4 key购买 nike

我正在尝试将一个大的 yml 拆分为一堆较小的 yml 文档。我按照 David Garcia here 提供的示例进行操作,然后使用 OpenAPI CodeGenerator 生成我的模型。 OpenAPI Generator 提示 [BUG] 属性 Components.schemas.Schema 名称不符合正则表达式 ^[a-zA-Z0-9.-_]+$。因此,我尝试通过克隆 David Garcia 的存储库并在本地部署来使用 David Garcia 的示例,但我遇到了相同的错误。我决定在swagger editor中查看一下。 ,我遇到了同样的问题,但错误消息显示

Semantic error at components.schemas.$ref
Component names can only contain the characters A-Z a-z 0-9 - . _
Jump to line 25

我使用的是 David Garcia 示例中的 yaml:

openapi: "3.0.0"
info:
version: 1.0.0
title: Swagger Petstore
description: Multi-file boilerplate for OpenAPI Specification.
license:
name: MIT
contact:
name: API Support
url: http://www.example.com/support
email: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8af9fffafae5f8fecaeff2ebe7fae6efa4e9e5e7" rel="noreferrer noopener nofollow">[email protected]</a>
servers:
- url: http://petstore.swagger.io/v1
tags:
- name: pets
paths:
/pets:
$ref: "./resources/pets.yaml"
/pets/{petId}:
$ref: "./resources/pet.yaml"
components:
parameters:
$ref: "./parameters/_index.yaml"
schemas:
$ref: "./schemas/_index.yaml"
responses:
$ref: "./_index.yaml"

您可以轻松地将其粘贴到the editor中并亲自查看错误。 OpenAPI 规范说 components objects can either be an Object or a Reference ,即 Map[string, Schema Object |引用对象],以及 Schema Object definition says ,“或者,任何时候可以使用架构对象,都可以使用引用对象来代替它。”

我知道我可以在 yaml 文档中将其分割,如下所示:

components:
parameters:
petId:
$ref: "./parameters/path/petId.yaml"
schemas:
pets:
$ref: "./schemas/Pets.yaml"
responses:
responseSchema:
$ref: "./response/pets200.yaml"

但是为什么我不能引用外部索引? online example说是,然后 open api spec说是的,但我无法让它工作。

最佳答案

人们普遍误解 OpenAPI 规范允许 $ref 任何地方。实际上,仅在 OpenAPI 规范规定字段值可以是“引用对象”或“架构对象”的地方才允许使用 $ref

具体来说,此代码段不是有效的 OpenAPI 语法:

components:
parameters:
$ref: "./parameters/_index.yaml"
schemas:
$ref: "./schemas/_index.yaml"
responses:
$ref: "./_index.yaml"

Map[字符串,架构对象 | Reference Object] 意味着 components.schemas 节点必须是一个映射,其中键是架构名称,值是内联架构或架构引用。正如您的第二个示例(这是有效的 OpenAPI 语法):

components:
parameters: # Map
petId: # <string,
$ref: "./parameters/path/petId.yaml" # Reference Object>
schemas:
pets:
$ref: "./schemas/Pets.yaml"
responses:
responseSchema:
$ref: "./response/pets200.yaml"

某些实现用于处理任何位置中的 $ref 的解决方法是使用通用 JSON $ref 解析器(例如 json-refs )对规范进行预处理,以解析那些非标准的$引用。例如,blog post您从使用 swagger-cli 解析非标准 $refs 并创建单个合并文件中获取了此示例。

关于json - openAPI 无法解析对外部文件的引用。组件名称包含无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72692397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com