userver
userver copied to clipboard
Add the ability to pass arbitrary data from middleware to service methods (gRPC)
Add some mechanism to pass arbitrary data from middleware to service methods in gRPC
gRPC middleware
const auto& token = context.GetCall().GetContext().client_metadata().find("token")->second;
auto id = foo(token);
// some middleware logic ...
??? add id to call context
Service
void SomeService::Some(some_service::SomeServiceBase::SomeCall& call,
some_service::SomeRequest&& request)
{
??? get id from middleware
some_service::SomeResponse response;
call.Finish(response);
}
example like RESTapi Middleware
const auto& auth_value = request.GetHeader(http::headers::kAuthorization);
// some middleware logic ...
request_context.SetData("name", info.name);
Service
std::string HandleRequestThrow(
const server::http::HttpRequest&,
server::request::RequestContext& ctx) const override {
return "Hello world, " + ctx.GetData<std::string>("name") + "!\n";
}