【问题标题】:How to support patch rest request with protobuf 3如何使用 protobuf 3 支持补丁休息请求
【发布时间】:2017-06-13 06:18:14
【问题描述】:

我们经常遇到只想更新资源子集字段的用例。所以如果我们有资源Person:

type Person struct {
    Age int
    Name string
    Otherfield string
}

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

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

{
    Age: 21
}

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

【问题讨论】:

标签: protocol-buffers proto3


【解决方案1】:

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

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

{
   mask: "Person.Age"
}

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

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

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

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

【讨论】:

  • 您能否解释一下 FieldMask 在什么级别上进行过滤?在拦截器级别?最后,在服务方法中,我们得到过滤的资源?
  • 迟到总比没有好 - FieldMask 不做任何过滤。它只是一个数据结构,允许服务器获取客户端想要更新的字段列表。由服务器使用它来实现部分更新。
猜你喜欢
  • 2018-05-26
  • 2022-08-21
  • 1970-01-01
  • 2017-07-07
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多