Создание конечной точки HTTP REST API из существующего файла grpc .proto с потоковой передачей
У меня есть существующий файл сервера Java grpc, созданный из файла .proto. Мне нужно добавить конечные точки HTTP REST API для каждого вызова RPC в моем файле .proto. Вероятно, используется google.api.http.
Файл .proto выглядит примерно так:
rpc GetShelves(GetShelvesRequest) returns (stream Shelf);
В сервисе grpc это превращается в:
public StreamObserver<GetShelvesRequest> GetShelves( StreamObserver<GetShelvesResponse> responseObserver) { /* do something */ }
ОднакоStreamObserver
— это класс, предоставляемый gRPC, и он неприменим для HTTP. В идеале я бы использовал интерфейс StreamingResponseBody в Spring MVC для записи непосредственно в тело ответа, поскольку байты доступны в моей конечной точке REST. Однако я хочу повторно использовать один и тот же файл .proto, чтобы обеспечить согласованность между двумя конечными точками API.
Из документации google.api.http для транскодирования я должен добавить аннотацию типа:
rpc GetShelves(GetShelvesRequest) returns (stream Shelf) { option (google.api.http) = { get: "/v1/shelves/" }; }
Чтобы добавить конечную точку http. Ноstream
Ключевое слово сгенерирует SteamObserver.
Как использовать тот же файл .proto, но конечным результатом будет StreamObserver для grpc и StreamingResponseBody для http?
н/д, описано выше.