如何使用protobuf 3支持补丁休息请求

时间:2017-06-13 06:18:14

标签: protocol-buffers proto3

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

type Person struct {
    Age int
    Name string
    Otherfield string
}

假设主叫客户端只想更新Age字段。如何正常设置端点来处理这个问题?

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

{
    Age: 21
}

然而,这不能用于proto3,因为据我所知,没有空字段,只有默认值。在许多默认值有效的情况下,这不会起作用。

1 个答案:

答案 0 :(得分:4)

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

FieldMask对象与请求一起传递,并具有(在JSON中)的形式:

{
   mask: "Person.Age"
}

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

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

您可以查看FieldMask here的完整文档。

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