我知道对于部分更新,必须采取非幂等的操作。为此,有效的方法是向该资源发出 POST 请求。
我对相关资源有疑问。例如,想象以下资源及其属性:
帐户
身份证号
姓名
帐号#
用户(集合)用户
身份证号
姓名
现在假设我想要对帐户进行部分更新 - 例如,更改帐户的名称。
我可以提出以下请求作为有效的部分更新:
POST /account/id/123
{
"name" : "My New Name"
}
我的问题是关于完整的 PUT 请求,该请求必须是幂等的,并且必须包含资源的完整表示。
我可以执行以下操作作为有效的幂等请求吗?
PUT /account/id/123
{
"name" : "My New Name",
"accountNumber" : "654-345-4323"
}
这被认为是有效的幂等操作吗?我已包含所有顶级“帐户”信息,但我对此表示怀疑,因为我没有发布属于该帐户的所有 USERS
。
为了成为有效的幂等请求,我是否需要在 PUT 请求中包含其所有子资源?
最佳答案
更容易理解的方法是认为 PUT 方法忽略目标资源的当前状态,因此“完整资源表示”意味着它必须具有替换现有资源所需的所有数据资源与新资源。
在您的示例中,这可能是没有用户的帐户的有效完整表示。
当某些内容丢失时,服务器可以采用默认值,但是应该正确记录,因为某些用户可能会混淆部分更新。
关于REST API 设计 - PUT 请求 : What, 的资源关系和幂等性到底是指完整的资源表示吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29449543/