GRPC: Define proto post endpoint принимает параметры тела и запроса

Будучи новичком в GRPC, я изо всех сил пытаюсь понять, как определить конечную точку в прототипе, где она принимает как тело, так и параметры запроса. Параметры запроса являются необязательными и не обязательны для каждого запроса. Вот мой код на данный момент:

rpc TestService (TestRequest) returns (TestResponse) {
    option (google.api.http) = {
        post: "/api/v1/test"
        body: "*"
    };
}

В моем определении TestRequest у меня есть:

message TestRequest {
    google.protobuf.StringValue param_1 = 1;
    google.protobuf.StringValue param_2 = 2;
    google.protobuf.StringValue body_1 = 3;
    google.protobuf.StringValue body_2 = 4;
}

Моя команда curl будет выглядеть примерно так:

curl -X POST 'http://localhost/api/v1/test?param_1=data_param_1&param_2=data_param_2' -d '{
    "body_1" : "data_body_1",
    "body_2" : "data_body_2"
}'

Есть идеи, как заставить его работать?


person Killer Beast    schedule 04.12.2019    source источник


Ответы (1)


Узнал сам. Способ сделать это:

rpc TestService (TestRequest) returns (TestResponse) {
    option (google.api.http) = {
        post: "/api/v1/test"
        body: "testbody"
    };
}

А потом:

message TestRequest {
    google.protobuf.StringValue param_1 = 1;
    google.protobuf.StringValue param_2 = 2;
    TestBody body = 3;
}

А также:

message TestBody {
    google.protobuf.StringValue body_1 = 1;
    google.protobuf.StringValue body_2 = 2;
}

Справочные ссылки:

https://github.com/grpc-ecosystem/grpc-gateway/issues/234

https://cloud.google.com/endpoints/docs/grpc/transcoding

person Killer Beast    schedule 04.12.2019