Dav*_*ave 5 protocol-buffers proto3
我们经常有我们只想更新资源的子集字段的用例。所以如果我们有一个资源Person:
type Person struct {
Age int
Name string
Otherfield string
}
Run Code Online (Sandbox Code Playgroud)
假设调用客户端只想更新该Age字段。通常如何设置端点来处理这个问题?
我相信这应该通过PATCH请求来完成,只有字段被设置为有效负载的一部分,即:
{
Age: 21
}
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于 proto3,因为据我所知,没有空字段,只有默认值。这在默认值有效的许多情况下不起作用。
查看 Google 自己的 protobuf 文件(例如此处),他们使用 FieldMask 进行部分更新。
FieldMask 对象随请求一起传递,并具有以下形式(JSON 格式):
{
mask: "Person.Age"
}
Run Code Online (Sandbox Code Playgroud)
这允许客户端告诉服务器他们希望更新哪些字段,而不需要依赖部分消息本身来解决这个问题。
我认为这给(每个!)客户端增加了不必要的复杂性,但我们找不到任何其他方法来实现 proto3 的部分更新。
您可以在此处查看 FieldMask 的完整文档。
请注意,如果客户端不需要整个对象,它也可用于过滤掉响应。
| 归档时间: |
|
| 查看次数: |
3070 次 |
| 最近记录: |