Я пытаюсь создать 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;
}