【发布时间】:2017-06-06 06:56:04
【问题描述】:
type A struct {
Id int64
Email sql.NullString
Phone sql.NullString
}
假设我在数据库中有一条记录
A{1, "x@x.com", "1112223333"}
通过 PUT 发送更新请求
curl -X PUT -d '{"Email": "y@y.com", "Phone": null}' http://localhost:3000/a/1
这是一个伪算法,它适用于完整的 PUT 请求(即更新记录 A 的所有字段 - 但它会导致 PATCH 请求语义的困难 - 增量更新)
-- 将 json 解组为空记录
a := A{}
json.Unmarshal([]byte(request.body), &a)
-- 从数据库中加载记录
aFromDb = <assume we got record from db> //A{1, "x@x.com", "1112223333"}
-- 比较 a 和 aFromDB
-- 注意电子邮件更改并将其设置在 aFromDb 上 - 好的
-- 注意电话号码的变化--但请稍等!它是在 JSON 中明确设置为 NULL 还是甚至没有包含在 JSON 中?即 json 请求 - {"Email": "y@y.com", "Phone": null} 还是 {"Email": "y@y.com"}?
我们如何通过查看结构 a 中未编组的 json 来判断?
是否有另一种方法可以通过 rest 进行更新(使用补丁语义)?我正在寻找一种通用的方法(不依赖于特定的结构)。
【问题讨论】:
标签: go