Google gRPC Gateway: переопределение полей ответа?
В настоящее время я работаю над созданием службы gRPC, которая использует шлюз gRPC / обратный прокси-сервер HTTP, чтобы также предлагать поддержку HTTP. Я хотел бы следовать общим правилам дизайна Google API.
Пример, который я нашел в руководстве по разработке API Google, использует google.protobuf.Empty
сообщения для ответа методов удаления /RPC. Это нормально, но когда я генерирую .swagger.json
файл из .proto
файл с использованием protoc-gen- swagger из grpc-gateway, описание google.protobuf.Empty
сообщение извлекается как описание объекта ответа. Это не имеет значения и, вероятно, сбивает с толку пользователей моего API, поскольку люди, использующие шлюз HTTP, не используют protobufs.
...
"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 ответов
Вы можете написать сценарий, который удаляет нежелательные элементы из спецификации OpenAPI после того, как он был сгенерирован protoc
. Что-то типаjq 'del(.definitions.protobufEmpty)' your.swagger.spec.json
должно сработать.