锁定记录上PATCH调用的返回状态,没有任何更改

问题描述 投票:0回答:1

我有一个RESTful API,其中包含一个典型的PATCH调用,该调用允许在各种条件下更新字段。在某些情况下(特定状态或值的组合),更改被“锁定”在记录之外。如果用户向上述记录发出PATCH请求,但PATCH不会导致进行任何更改(即,将字段值设置为已经存在的相同值),则请求应返回什么状态?

例如,我有一个记录

{
  _id: 12345,
  name: 'John Doe',
  age: 34,
  status: 'locked'
}

我打个电话

PATCH /users/12345
{
  age: 34
}

由于记录的状态为“锁定”,因此不允许更改。但是,由于PATCH主体指出年龄值应设置为34,这是该记录的年龄值,因此即使未锁定记录,该请求也不会导致更改。

请求是否应返回200,因为PATCH的结果是用户首先请求的内容,还是4xx代码之一(400、403甚至409),因为正在尝试对“锁定”记录进行操作?

rest http-status-code-403 http-patch http-status-code-409
1个回答
0
投票

请求是否应返回200,因为PATCH的结果是用户首先请求的内容,还是4xx代码之一(400、403甚至409),因为正在尝试对“锁定”记录进行操作?

REST是HTTP应用程序的体系结构样式。在REST中,缓存非常重要。 RFC 7234描述了HTTP中缓存的语义。特别是,描述了cache invalidation

当接收到非错误状态代码时,缓存必须使有效请求URI([RFC7230]的5.5节)以及“位置”和“内容-位置”响应头字段(如果存在)中的URI无效。对不安全的请求方法的响应。

因此是考虑此问题的一种方法:如果客户端在缓存中具有资源的表示形式,您是否要强制客户端使缓存的条目无效并进行重新提取?

您可能要考虑的另一件事是您的锁定语义是否与WebDAV specification描述的一致?如果这样做,那么返回423 Locked可能是明智的。

© www.soinside.com 2019 - 2024. All rights reserved.