Десериализация пользовательских данных в GRPC API - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь создать GRPC API, в котором полезная нагрузка может иметь индивидуальный контракт для каждого пользователя.Пользователь может определить контракт, расширив базовый (фиксированный) контракт заранее (возможно, хранящийся в базе данных) и начать отправку согласно его пользовательскому контракту.

Я могу определить базовый контракт в файле .proto игенерировать классы сервера и клиента во время компиляции, но есть ли какой-нибудь способ, которым я могу принудительно установить пользовательский контракт во время десериализации.

например,

BaseObject
 - Id
 - Date

UserObjectFoo
 - Id
 - Date
 - userAttr1

UserObjectBar
 - Id
 - Date
 - userAttr2

Определение UserObjectFoo иUserObjectBar был предоставлен после развертывания, поэтому он не известен .proto.

Есть ли способ, которым мы могли бы десериализовать полезную нагрузку типа UserObjectFoo и UserObjectBar во время выполнения после извлечения их определения из персистентности.

Примечание. Один элементарный способ состоит в том, чтобы использовать пользовательские поля, такие как userAttr1 и userAttr2, в качестве пары ключ-значение, но это необходимо будет проверять только после десериализации в Map с помощью логики приложения, что может привести к накладным расходам.

т.е.

      {
        String id = 1
        Date   date = 2;
        map<string, string> attributes = 3;
      }
...