关于gRPC转HTTP中post路径{parent=publishers/*}的技术疑问
关于gRPC HTTP映射语法
{parent=publishers/*}的解释 首先看你的gRPC定义里的CreateBookRequest,是有parent字段的(第1个字段),这个语法的作用是把HTTP请求路径中匹配publishers/*的部分,自动赋值给CreateBookRequest的parent字段,拆解细节如下:
- 语法格式:
{目标字段名=路径匹配规则},这里的parent是CreateBookRequest里的字段,publishers/*是HTTP路径的匹配模板 - 实际生效逻辑:
- 当客户端发送HTTP POST请求到类似
/v1/publishers/12345/books的路径时,publishers/12345这部分会被捕获 - gRPC网关会自动把
CreateBookRequest的parent字段填充为publishers/12345,不需要你在请求体里传递这个字段(对应注释里的“自动基于URI填充”)
- 当客户端发送HTTP POST请求到类似
- 你之前的误解点:这个语法里的
publishers/*是路径匹配规则,不是请求里的字段名,它的作用是告诉网关从HTTP路径的哪个位置取值,然后赋值给指定的parent字段
附上你的gRPC代码方便对照:
rpc CreateBook(CreateBookRequest) returns (Book) { option (google.api.http) = { post: "/v1/{parent=publishers/*}/books" body: "book" }; } message CreateBookRequest { // The publisher who will publish this book. // When using HTTP/JSON, this field is automatically populated based // on the URI, because of the `{parent=publishers/*}` syntax. string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { child_type: "library.googleapis.com/Book" }]; Book book = 2 [(google.api.field_behavior) = REQUIRED]; string book_id = 3; }
内容的提问来源于stack exchange,提问作者Stacy Lin
相关产品推荐
相关产品推荐

