Я использую grpc-gateway
внутри того же приложения go, чтобы прокси конвертировать HTTP в GRPC. Насколько я понимаю, по умолчанию grpc-gateway
устанавливает формат приложения application/json
для всех rpcs, включая стриминговые.
Итак, моя задача:
- Входящие HTTP-запросы ДОЛЖНЫ всегда быть
Content-type: application/json
, в противном случае запрос должен быть отклонен и отправлен 406 в соответствии с RFC. - Входящий HTTP-запрос МОЖЕТ иметь
Accept: application/x-ndjson
установленный для унарных RPC иAccept: applcation/x-ndjson
заголовок установлен для серверных потоков. Если условия не выполняются 406, должен быть возвращен. - Исходящий HTTP-запрос ДОЛЖЕН установить
Content-type: applicaiton/json
для простых унарных RPC иContent-type: application/x-ndjson
для серверных потоков.
Итак, grpc-gateway
предлагает только установить собственный маршаллер для application/x-ndjson
, который фактически будет делать то же самое, что и маршаллер по умолчанию, то есть с просто перезаписанным методом ContentType
. Этот подход не позволяет мне устанавливать маршалер для каждого вызова метода и не позволяет мне отклонять неподдерживаемый тип контента для каждого запроса.
Как я могу добиться этого, используя grpc-gateway
? Или мне следует подумать о том, чтобы реализовать преобразование http grpc вручную?