Как предоставить сервис gRPC как в формате Protobuf, так и в формате JSON

#grpc #grpc-java

#grpc #grpc-java

Вопрос:

Можем ли мы предоставить сервис gRPC (на JAVA) с кодировкой как Protobuf, так и JSON? Как мы можем сделать в HTTP REST, где сервер создает и устанавливает заголовок ответа на основе client Content-Type : ( application/json or application/xml or application/proto ).

Комментарии:

1. Возможно, это то, что вы ищете: armeria.dev (особенно armeria.dev/docs/server-grpc#unframed-requests )

Ответ №1:

gRPC поддерживает потоковую передачу, которая не может быть реализована в HTTP / 1. Невозможно сделать сервис gRPC доступным как классический HTTP REST.

Twirp должен быть довольно близок к тому, что вы хотите. Он использует простой HTTP / 1, генерируется из определений сервисов в файлах .proto. Он поддерживает только унарные методы. https://twitchtv.github.io/twirp/docs/intro.html

gRPC-web является альтернативой, если вы хотите использовать свой сервис с помощью веб-браузера. Он поддерживает унарные и серверные методы потоковой передачи. Самое главное, вы можете использовать прокси-сервер envoy, чтобы сделать ваши существующие сервисы gRPC доступными как gRPC-web.

Комментарии:

1. Или мы можем использовать JSON и ProtoBuf в качестве типа ответа в службе gRPC, поэтому на основе типа содержимого клиента служба gRPC может возвращать соответствующий ответ (JSON / Protobuf).

2. Клиенты Twirp могут запрашивать либо JSON, либо Protobuf. Затем сервер Twirp должен ответить соответствующим типом. См . twitchtv.github.io/twirp/docs/spec_v7.html#requests