我正在gRPC
使用服务器(使用protobuf
)在 GO 中构建应用程序,并将其包装在 HTTPS 服务器中(使用gin
)。只有 HTTPS 服务器被发布到客户端使用(我的意思是我的应用程序可以通过 REST API 访问,实际上然后在 gRPC 端点上拨号),我使用Swagger
OpenAPI3发布它(版本 3 是主要的此处要求)规范。gRPC 和 HTTPS 都是必需的,任何解决方案都应遵循此架构。
我不想在两个地方维护我的服务器规范,即我不想同时维护 proto 文件 ( .proto
) 和 swagger 规范 ( .json/.yaml
)。由于我绝对必须编写 proto 文件来生成 gRPC 服务器,因此我想自动生成 swagger 规范(OpenAPI3)。
我能够使用grpc-gateway库swagger
从 protobuf 文件 ( .proto
)生成OpenAPI2 规范,如下所示:grpc-rest-go-example。但我的要求是 OpenAPI3;更具体地说,我想使用OpenAPI3 中的功能并从proto 的功能映射到它。这在 OpenAPI2 中是不可能的,因为它不允许 API 具有多个类型定义的请求/响应主体,这是 OpenAPI3 中通过启用 oneOf、anyOf 和 allOf 构造添加的一项功能。oneOf
oneof
在尝试这样做时,我偶然发现了 GoogleAPIs googleapis/ gnostic 的这个库,其描述是:
该存储库包含一个 …