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