Protobuf / gRPC Gateway: относительные пути с опциями HTTP перезаписывают друг друга

В настоящее время я использую gRPC и буферы протокола для размещения службы. Я работаю над добавлением функциональности HTTP через шлюз gRPC, но у меня возникла проблема. Для нескольких RPC я хотел бы отобразить поля в прото-запросе в URI. Кажется, есть две формы синтаксиса для этого:

используя имя поля в фигурных скобках:

option (google.api.http) = { get: "/v1/shelves/{shelf}" };

с использованием подстановочного знака в пути, присвоенного имени поля

option (google.api.http) = { get: "/v1/{name=shelves/*}/books" }

Вторая форма, кажется, является официальным рекомендуемым стилем / синтаксисом Google, поскольку вторая ссылка взята из их руководства по разработке API. Тем не менее, их руководство, кажется, не обсуждает много о том, как работает этот синтаксис.

Вторая форма синтаксиса привлекает меня. Я не могу вспомнить, где, но я прочитал, что вы можете использовать относительные пути для того же поля, чтобы указать вложенные ресурсы. В любом случае, я не могу заставить работать даже простой пример (только с одним параметром URI). Когда я использую плагин grpc-gateway protoc-gen-swagger для создания swagger.json файл из моего proto файл:

rpc DeleteAuthor(DeleteAuthorRequest) returns (google.protobuf.Empty) {
  option (google.api.http) = { delete: "/api/sample/v1alpha2/{name=authors/*}" };
}

а также

rpc DeleteBook(DeleteBookRequest) returns (google.protobuf.Empty) {
  option (google.api.http) = { delete: "/api/sample/v1alpha2/{name=books/*}" };
}

оба сопоставляются с одним и тем же путем, вызывая перезапись первого RPC в swagger.json файл:

...
"paths": {
  "/api/sample/v1alpha2/{name}": {
    "delete": {
      "operationId": "DeleteBook",
      ...
    }
  }
}
...

Чтобы было ясно, весь DeleteAuthor RPC не отображается в swagger.json файл.

Мне интересно, если это проблема с плагином или есть что-то, что я неправильно понимаю в синтаксисе. Есть ли где-нибудь, что этот синтаксис задокументирован? Кроме того, есть ли предпочтение или преимущество для одной формы синтаксиса по сравнению с другой?

0 ответов

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