Google gRPC Gateway:覆盖响应字段?

时间:2018-08-10 23:20:48

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

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

我在Google API设计指南中找到的example使用google.protobuf.Empty消息来响应删除方法/ RPC。很好,但是当我使用grpc-gateway的protoc-gen-swagger从.swagger.json文件生成.proto文件时,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注释以某种方式处理或覆盖响应中的字段?如果没有,人们如何处理?

1 个答案:

答案 0 :(得分:1)

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