如果我还要更新时间戳属性
|
更准确地说:
根据其余样式,通常假定POST,GET,PUT和DELETE http方法应用于CREATE,READ,UPDATE和DELETE(CRUD)操作。
实际上,如果我们坚持使用http方法定义,那么事情可能就不太清楚了。
在本文中,它解释为:
简而言之:只有且仅当您知道资源将驻留的URL以及资源的全部内容时,才使用PUT。否则,请使用POST。
主要是因为
PUT是限制性更强的动词。它需要完整的资源并将其存储在给定的URL中。如果以前有资源,则将其替换;如果不是,则创建一个新的。这些属性支持幂等,而天真的创建或更新操作可能不支持幂等。我怀疑这可能就是为什么按这样定义PUT的原因。这是一个幂等操作,它允许客户端将信息发送到服务器。
就我而言,我通常会发布传递所有资源数据的更新,因此我可以使用PUT进行更新,但是每次发布更新时,我都会保存LastUser和LastUpdate列,其中包含进行修改的用户ID和操作时间。
因此,我想知道您的意见,因为严格来讲,这两列不是资源的一部分,但它们确实阻止了运算的幂等。
礼炮
萨斯
没有找到相关结果
已邀请:
4 个回复
绊伦欧
课刊灭似
如果客户端想要修改资源,则大概会采用整个表示形式并将其发送回API。
由于API会自动为
和ѭ5values生成值,并且无法接受客户端提供的数据,因此最合适的响应为
或
(因为客户端无法修改这些值)。 如果我们要符合REST并在执行PUT请求时发送资源的完整表示,则需要从资源表示中删除
和
。这将允许客户端通过PUT发送完整实体:
由于服务器不包含
和
,因此它将接受完整的表示形式。 剩下的问题是如何为客户提供访问“ 5”和“ 4”的权限。如果他们不需要它(并且API仅在内部需要这些字段),我们很好,我们的解决方案是完全RESTful的。但是,如果客户端需要访问此数据,则最干净的方法是使用HTTP标头:
使用自定义HTTP标头并不理想,因为需要教用户代理如何读取标头。如果我们想让客户以更简单的方式访问相同的数据,我们唯一能做的就是将数据放入表示中,并且我们面临着与您原始问题相同的问题。我至少会尝试以某种方式缓解它。如果API使用的内容类型是XML,我们可以将数据放入节点属性中,而不是直接将它们作为节点值公开,即:
这样,我们至少可以避免客户端尝试在后续PUT请求中提交所有XML节点的问题。这不适用于JSON,而且解决方案仍在幂等性边缘(因为API在处理请求时仍必须忽略XML属性)。 正如乔纳(Jonah)在评论中指出的,甚至更好,如果客户需要访问“ 4”和“ 5”,则这些资源可以作为一种新资源公开,与原始资源链接,例如如下:
... 然后:
(上面的内容也可以很好地扩展,以提供具有单个更改的完整审核日志,并提供资源更改日志。) 请注意: 我同意达雷尔·米勒(Darrel Miller)对这个问题的看法,但我想在此之上提供另一种方法。请注意,此方法不受任何标准/ RFC / etc的支持,只是对该问题的不同理解。
桔马牛
暑袜眠退