google-api - 谷歌 gRPC 网关 : Overriding response fields?

标签 google-api swagger protocol-buffers grpc grpc-gateway

我目前正在创建一个 gRPC 服务,该服务使用 gRPC 网关/HTTP 反向代理来提供 HTTP 支持。我想遵循 Google API 设计的通用约定。

example我在 Google API 设计指南中发现使用 google.protobuf.Empty用于响应删除方法/RPC 的消息。这很好,但是当我生成 .swagger.json 时来自 .proto 的文件使用来自 grpc-gateway 的 protoc-gen-swagger 的文件,说明google.protobuf.Empty消息作为响应对象的描述被拉入。这对我的 API 用户来说是无关紧要的并且可能会造成混淆,因为使用 HTTP 网关的人没有使用 protobuf。

...
"paths": {
  "/v1/{name}": {
    "delete": {
      "summary": "Deletes a book.",
      "operationId": "DeleteBook",
      "responses": {
        "200": {
          "description": "",
          "schema": {
            "$ref": "#/definitions/protobufEmpty"
          }
        }
      },
      ...
    }
  }
},
"definitions": {
  "protobufEmpty": {
    "type": "object",
    "description": "service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
    "title": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:"
  }
}

我会说这是一个应该由 protoc-gen-swagger 插件解决的问题,除了它确实在做它应该做的事情。是否有 HTTP 注释以某种方式处理或覆盖响应中的字段?如果没有,人们如何处理?

最佳答案

您可以编写一个脚本,在 OpenAPI 规范生成后从 protoc 中删除不需要的元素。 .类似 jq 'del(.definitions.protobufEmpty)' your.swagger.spec.json应该管用。

关于google-api - 谷歌 gRPC 网关 : Overriding response fields?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51795086/

相关文章:

python - Google 云端硬盘 API 客户端 : How to get the list of files in a folder

google-api - Google OAuth2 重新授权在同意页面上缺少权限

java - 序列化相对简单的 Java POJO 的最快方法?

protocol-buffers - 从使用 protoc 生成的 pb2.py 逆向工程 .proto 文件

java - gRPC protobuf 未使用 kotlin 构建进行编译 (Android Studio 3.0)

google-maps - 用于 localhost 开发的 Google API KEY 引用通配符

c++ - 谷歌 API 翻译

asp.net-web-api2 - Swagger 不支持 Swagger 2.0 : Multiple operations with path

java - 如何为 swagger 注释 Play 2 webapp 模型?

java - 使用 Swagger 记录现有的 JAX-RS 实现而不对其进行注释