GRPC:定义原型发布终结点,接受主体和请求参数

时间:2019-12-04 08:15:46

标签: grpc proto

作为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"
}'

有任何想法如何使其正常工作吗?

1 个答案:

答案 0 :(得分:0)

自己发现了。这样做的方法是:

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