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 должно сработать.

Другие вопросы по тегам