Создание конечной точки 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?

н/д, описано выше.

0 ответов

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