问题标签 [swagger-3.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4479 浏览

protocol-buffers - 如何从 protobuf (.proto) 文件中生成 (.json/.yaml) 中的 swagger3 (OpenAPI3) 规范?

我原来的用例:

我正在使用gRPC服务器(使用protobuf)在 GO 中构建应用程序,并将其包装在 HTTPS 服务器中(使用gin)。只有 HTTPS 服务器被发布到客户端以供使用(我的意思是我的应用程序可以通过 REST API 访问,然后实际上在 gRPC 端点上拨号),我使用SwaggerOpenAPI3 发布它(版本 3 是主要的这里的要求)规范。gRPC 和 HTTPS 都是必需的,任何解决方案都应遵循此架构。

我不想在两个地方维护我的服务器规范,即我不想同时维护 proto 文件 ( .proto) 和 swagger 规范 ( .json/.yaml)。由于我绝对必须编写 proto 文件来生成 gRPC 服务器,因此我想自动化 swagger 规范生成 (OpenAPI3)。

我在哪里:

我可以使用grpc-gatewayswagger从 protobuf 文件 () 生成 OpenAPI2 规范,如下所示: grpc-rest-go-example。但我的要求是 OpenAPI3;更具体地说,我想使用OpenAPI3 中的功能并从proto 的功能映射到它。这在 OpenAPI2 中是不可能的,因为它不允许 API 具有多个类型定义的请求/响应主体,这是 OpenAPI3 通过启用 oneOf、anyOf 和 allOf 构造添加的功能。.protooneOfoneof

在尝试这样做时,我偶然发现了 GoogleAPIs googleapis/ gnostic 的这个库,它的描述是:

此存储库包含一个 Go 命令行工具,可将 JSON 和 YAML OpenAPI 描述与等效的协议缓冲区表示形式相互转换。

乍一看,这似乎完全解决了我的问题,但事实证明,这个库只在协议缓冲区 (protobuf) 二进制 ( .pb) 和 swagger OpenAPI2/OpenAPI3 ( .json/.yaml) 文件之间相互转换,这让我想到了我的新问题。

例如,对于以下.pb文件:

它生成以下招摇文件:

.pb可能无法正确查看,请在此处访问。所以像:

好像:

对于上面的示例,我首先编写了 swagger 规范,然后生成了.pb同样的方法,但反过来也可以。

当前状态:

如果我有办法在 ( .pb) 和 ( .proto) 文件之间进行转换,则转换循环将关闭并完成 ( .proto-> .pb-> .json/.yaml-> .pb-> .proto)。

我确信必须有一种方法来实现这一点,因此我的原始问题存在解决方案。但是我找不到任何可以做到这一点的文章或代码。是否有健全的方法可以在文件之间进行相互.pb转换.proto

如果您对我的原始用例有完全不同的解决方案,也请随时分享。这会有很大帮助。

提前致谢!

编辑:

(1) 感谢最近的评论,很明显,在.pb和之间进行“转换”.proto首先是一个荒谬的问题。但最初的问题仍然存在,即如何.proto使用注释、标签或其他方式从 protobuf 文件 () 生成 swagger3 (OpenAPI3) 规范。相应地更改问题标题。

(2) 就在我发布这篇文章的第二天,我碰到了gnostic-grpc存储库,其中的描述说:

此工具将 OpenAPI v3.0 API 描述转换为 gRPC 服务的描述,该服务可用于使用 gRPC-JSON 转码实现该 API。

同样,这让我过早退出。实际上,这是一个 GSOC 项目,尽管这个存储库的想法令人惊叹,但它并不能满足要求。此外,这不是一个相互转换的库,对于任何生产用途都非常不成熟。事实上,它未能提供 OpenAPI3 规范的一些基本特性。

但是这个存储库正朝着正确的方向前进。我的结论是有一个自定义插件可以做到这一点,主要是通过扩展 GO 中的注释库。

(3) 显然,除了gnostic-grpc还非常不成熟,并且正在为任何类型的实际用途进行大量工作之外,没有好的和明显的候选者可以转换.proto为 OpenAPI3 规范 ( )。.yaml/.json

但是对于反向转换,即 OpenAPI3 spec ( .yaml/.json) to .proto,在 OpenAPITools 下有一个名为openapi-generator的好库,它可以将 OpenAPI v2/3 规范转换为几乎所有平台的客户端/服务器存根。但由于这不是最初的问题,所以问题仍然悬而未决。

0 投票
1 回答
442 浏览

c# - Swagger:如何获取格式化的 json 字符串

以下是当前返回并在 Swagger UI 中显示的示例 JSON 字符串的格式。有没有更好的方法来返回格式化的 JSON 字符串并在 UI 上显示而无需显式的字符串替换功能。

预期的:

0 投票
1 回答
1018 浏览

javascript - 如何使用 javascript 在 Swagger UI 3.0 版本中添加“承载”身份验证标头,而不是单击“授权”按钮

我正在使用 Swagger UI 3.0 来调用此处列出的端点 API。要调用 api,我必须在标头中添加身份验证。我们有 javascript 将身份验证添加到 swagger UI,这将身份验证全局添加到 Swagger UI 2.0 版本的 swagger UI 中的所有 API。所以这样,我不必在招摇 UI 中单击“授权”按钮来在标题中添加身份验证令牌。

但最近我们转向了新的 swagger 3.0 版本。结果,这个 javascript 不再工作了。

有没有办法在 Swagger UI 3.0 中使用任何 javascript 添加 Bearer auth 的标头,而不是单击“授权”按钮。

我问这个是因为每次打开 swagger UI 来调用 API 时手动添加身份验证真的很烦人。

我不想单击下面的授权按钮来添加 Auth 标头。相反,我想使用一些 javascirpt 添加它。 在此处输入图像描述 在此处输入图像描述

0 投票
2 回答
2391 浏览

java - 在 swagger 3.0 UI 上隐藏端点

我想要一个私有端点,它应该隐藏在 Swagger API UI 上。

参考我创建的过滤器类的其他一些帖子,如下所示。

我看到加载 Swagger UI 时没有调用 isOperationAllowed。什么时候调用 isOperationAllowed 方法?

0 投票
1 回答
824 浏览

springdoc - 如何在 Springdoc Swagger v3 中表示字符串列表?

下面是一个类似于我的情况的代码

如何指定从端点返回的用户列表ApiResponse()

请注意,Open-API-Definition 不是项目的一部分,而是在另一个项目中指定的。

0 投票
2 回答
2272 浏览

java - JAVA:使用 swagger.v3.parser.OpenAPI 解析 OPEN API

我正在尝试解析一个 OPEN API URL,这是它的以下代码

这给了我以下例外

我正在使用的图书馆是

是否有任何其他库可用于解析 OPEN API 3.0?

0 投票
0 回答
237 浏览

swagger - 在 Open API 3.0 中的响应正文中描述对象中的管道分隔编码

所以也许我试图在我的描述符中介绍太多细节,但这是我的用例。在为我的 API 定义在响应正文中返回的对象架构时,我有一个对象属性,其值是具有可变属性的对象,因此我使用additionalProperties描述符。

但是,我不想将type这个变量键控对象中的值描述为string,而是更准确地描述它们,因为该字符串实际上是一个以管道分隔的数组序列化。例子:

有什么方法可以描述这种以管道分隔的序列化吗?就像是:

或者这仅适用于查询参数

0 投票
1 回答
738 浏览

java - Spring Boot 2.2.4 springdoc OpenApi Swagger V3 hatoas 问题

在集成springdoc-openapi-data-rest库以将 Pageable(spring-date-commons) 对象映射到 Swagger UI 中的正确 URL-Parameter 后,我遇到了这个问题:

请问我怎样才能有效地解决这个问题?谢谢

0 投票
1 回答
274 浏览

swagger - Swagger 发送和接收数组

我在请求中发送单个 dataInfo 并获得单个 dataInfoStatus 作为响应,但我想发送 dataInfo 数组并获取 dataInfo 状态数组。

我试过以下:

但我明白了

解析器错误映射条目的缩进错误

对于项目。我正在关注这个

如何实现将请求中的 dataInfo 作为 dataInfo 数组发送并获得 dataInfoStatus 数组作为响应?

0 投票
1 回答
368 浏览

reactjs - 使用 swagger-client 向 swagger 请求添加不记名令牌

我正在尝试在登录帐户时将不记名 JWT 令牌添加到招摇请求中,但我似乎无法使其正常工作。文档还有很多不足之处。

const SWAGGER_CLIENT = SwaggerClient(".../api.yml");

const carsResponse = await SWAGGER_CLIENT.client.execute({ operationId: "getCars" }); // I need { Authorizations: Bearer ${token}} here

如果无法在其中添加它,那么我总是可以在成功登录后使用令牌创建上面的客户端。

我认为问题在于语法。几乎没有关于如何使用该.execute()方法的文档,这非常令人沮丧。FWIW;我正在使用 execute 方法并传入标签名称,以使其比使用生成的函数(例如getCars(), addCar()等)更具可重用性。我不知道这是否是使用 Swagger 的“正确”方式,但这对我来说很有意义。

是否可以全局添加它,所以我不需要在每个请求中都包含它?成功登录后需要添加令牌。这是一个使用 Redux 的 CRA 应用程序。

如果有人可以解释或提供一个将授权不记名令牌添加到上述请求的小示例,那就太好了,非常感谢。

谢谢大家。