userver icon indicating copy to clipboard operation
userver copied to clipboard

Add the ability to pass arbitrary data from middleware to service methods (gRPC)

Open root-kidik opened this issue 1 year ago • 0 comments

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";
  }

root-kidik avatar Nov 11 '23 19:11 root-kidik