Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Protocol buffers 如何使用protobuf 3支持补丁rest请求_Protocol Buffers_Proto3 - Fatal编程技术网

Protocol buffers 如何使用protobuf 3支持补丁rest请求

Protocol buffers 如何使用protobuf 3支持补丁rest请求,protocol-buffers,proto3,Protocol Buffers,Proto3,我们经常有只想更新资源上的子集字段的用例。因此,如果我们有一个资源人: type Person struct { Age int Name string Otherfield string } 假设调用客户端只想更新年龄字段。通常如何设置端点来处理此问题 我认为这应该通过补丁请求来完成,仅将字段设置为有效负载的一部分,即: { Age: 21 } 但是,这对proto3不起作用,因为据我所知,没有空字段,只有默认值。这在默认值有效的许多情况下都不起作用。查看G

我们经常有只想更新资源上的子集字段的用例。因此,如果我们有一个资源

type Person struct {
    Age int
    Name string
    Otherfield string
}
假设调用客户端只想更新
年龄
字段。通常如何设置端点来处理此问题

我认为这应该通过
补丁
请求来完成,仅将字段设置为有效负载的一部分,即:

{
    Age: 21
}

但是,这对proto3不起作用,因为据我所知,没有空字段,只有默认值。这在默认值有效的许多情况下都不起作用。

查看Google自己的protobuf文件(例如),它们使用FieldMask进行部分更新

FieldMask对象随请求一起传递,其形式为(JSON):

这允许客户端告诉服务器他们希望更新哪些字段,而无需依靠部分消息本身来解决这个问题

我认为这在(每个!)客户端上增加了不必要的复杂性,但我们找不到任何其他方法来实现proto3的部分更新

您可以查看FieldMask的完整文档


注意,如果客户端不需要整个对象,它还可以用于过滤响应

答案可能与这里相同:使用proto2你能解释一下FieldMask在什么级别进行过滤吗?在拦截层?最后,在服务方法中,我们得到过滤的资源?比从不过滤更好-FieldMask不做任何过滤。它只是一个数据结构,允许服务器获取客户机想要更新的字段列表。由服务器使用它来实现部分更新。
{
   mask: "Person.Age"
}