我实现了一个重命名公司的 API,如下所示:
PUT /companies/A
{
"name": "B"
}
将返回指向公司新 URI:HTTP 301
的标头。Location
/companies/B
我怎样才能使这个操作在有和没有If-Match
标题的情况下是幂等的?
没有
If-Match
标头:如果用户尝试重命名不存在的公司,我希望服务器返回HTTP 404
,但我不能这样做,因为合法的重命名操作不会是幂等的(它们会301
第一次返回,并且404
在随后的调用中)。这是有问题的,因为我希望客户能够区分失败的重命名(公司不存在)和已经发生的重命名。带头
If-Match
:如果公司的ETag
依赖于公司名称,那么后续的重命名操作将失败,因为前提条件不再成立。同样,这使得操作看起来失败,而实际上它已经发生了。