Mat*_*ipe 5 api json put go partial
我的情况是,使用我们的API的人需要在我的资源中进行部分更新.我理解HTTP明确指出这是一个PATCH操作,即使我们这边的人都用来发送PUT请求,这就是遗留代码的构建方式.
举例来说,想象一下简单的结构:
type Person struct {
Name string
Age int
Address string
}
Run Code Online (Sandbox Code Playgroud)
在POST请求中,我将提供具有所有三个值(名称,年龄,地址)的有效负载,并在我的Golang后端上相应地验证它们.简单.
但是,在PUT/PATCH请求中,我们知道,例如,name永远不会改变.但是说我想改变它age,然后我只是发送一个包含新的JSON有效载荷age:
PUT /person/1 {age:30}
Run Code Online (Sandbox Code Playgroud)
现在我的真正问题是:name如果我们的API的消费者发送包含该name字段的JSON有效负载,防止有意或无意修改使用/更新的最佳做法是什么?
例:
PUT /person/1 {name:"New Name", age:35}
Run Code Online (Sandbox Code Playgroud)
我想到的可能的解决方案,但我实际上并不喜欢它们,是:
在我的validator方法上,我要么强行删除不需要的字段,要么name回复一条错误消息说name不允许.
创建一个DTO对象/结构,它几乎是我的Person结构的扩展,然后将我的JSON有效负载解组到它中,例如
type PersonPut struct {
Age int
Address string
}
在我看来,这将添加不必要的额外代码和逻辑来抽象问题,但我没有看到任何其他优雅的解决方案.
老实说,我不喜欢这两种方法,我想知道你们是否面临同样的问题,以及你们是如何解决它的.
谢谢!
我不精通 Golang,但我相信一个好的策略是将您的name字段转换为只读字段。
例如,在 Java/.NET/C++ 等严格面向对象的语言中,您可以只提供 Getter,但不能提供 Setter。
也许 Golang 有一些访问器配置,就像 Ruby 一样......
如果它是只读的,那么它不应该费心接收备用值,它应该忽略它。但同样,不确定 Golang 是否支持它。
| 归档时间: |
|
| 查看次数: |
1284 次 |
| 最近记录: |