0

我有一个 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),因为正在“锁定”记录上尝试操作?

4

1 回答 1

0

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

REST 是 HTTP 应用程序的架构风格。缓存在 REST中非常重要。RFC 7234 描述了 HTTP 中缓存的语义。特别是描述了缓存失效

当接收到非错误状态代码以响应一个不安全的请求方法。

所以考虑这个问题的一种方法是:如果客户端在缓存中有资源的表示,您是否要强制客户端使缓存条目无效并重新获取?

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

于 2019-10-08T21:01:37.100 回答