我有一个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),因为正在尝试对“锁定”记录进行操作?
请求是否应返回200,因为PATCH的结果是用户首先请求的内容,还是4xx代码之一(400、403甚至409),因为正在尝试对“锁定”记录进行操作?
REST是HTTP应用程序的体系结构样式。在REST中,缓存非常重要。 RFC 7234描述了HTTP中缓存的语义。特别是,描述了cache invalidation。当接收到非错误状态代码时,缓存必须使有效请求URI([RFC7230]的5.5节)以及“位置”和“内容-位置”响应头字段(如果存在)中的URI无效。对不安全的请求方法的响应。
因此是考虑此问题的一种方法:如果客户端在缓存中具有资源的表示形式,您是否要强制客户端使缓存的条目无效并进行重新提取?
您可能要考虑的另一件事是您的锁定语义是否与WebDAV specification描述的一致?如果这样做,那么返回423 Locked可能是明智的。