我目前正在创建一个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注释以某种方式处理或覆盖响应中的字段?如果没有,人们如何处理?
答案 0 :(得分:1)
您可以编写一个脚本,以在protoc
生成OpenAPI规范后删除不需要的元素。 jq 'del(.definitions.protobufEmpty)' your.swagger.spec.json
之类的东西应该可以工作。