我有一种情况,使用我们的 API 的人需要对我的资源进行部分更新。我知道 HTTP 明确指定这是一个 PATCH 操作,即使我们这边的人习惯于为此发送 PUT 请求,这就是遗留代码的构建方式。
作为示例,想象一下简单的以下结构:
type Person struct {
Name string
Age int
Address string
}
在 POST 请求中,我将提供包含所有三个值(名称、年龄、地址)的有效负载,并在我的 Golang 后端相应地验证它们。简单的。
但是,对于 PUT/PATCH 请求,我们知道,例如,aname永远不会改变。但是如果我想更改age,那么我只需发送一个包含新的 JSON 有效负载age:
PUT /person/1 {age:30}
现在我的真正问题是:防止name我们的 API 的使用者发送包含该name字段的 JSON 有效负载时有意或无意地使用/更新的最佳实践是什么?
例子:
PUT /person/1 {name:"New Name", age:35}
我想到的但实际上并不喜欢它们的可能解决方案是:
在我的validator方法中,我要么强行删除不需要的字段,要么name回复一条错误消息,说这name是不允许的。
创建一个 DTO 对象/结构,它几乎是我的Person结构的扩展,然后将我的 JSON 有效负载解组到其中,例如
type PersonPut struct {
Age int
Address string
}
在我看来,这会添加不必要的额外代码和逻辑来抽象问题,但是我没有看到任何其他优雅的解决方案。
老实说,我不喜欢这两种方法,我想知道你们是否遇到了同样的问题以及如何解决它。
千巷猫影
当年话下
holdtom
相关分类