用于附加到资源对象的HTTP谓词



我正在尝试构建一个符合json:api规范的api。

我的api有三个资源/task/item/result。任务具有字段namedescriptionstate。项目具有字段itemName。为该项目保留count服务器站点,并且当用户用GET请求检索该项目时返回count。当项目更新时,count在服务器端递增。任务和项目之间存在一对多关系。从某种意义上说,一个项目被附加到一项任务中。当任务状态发生更改时,脚本会在服务器端运行,以对关联项进行一些处理。一旦脚本完成,结果资源中就可以获得输出。

根据规范,我使用POST谓词创建任务,使用PATCH更新任务。我只想要一个端点来处理项目的创建/更新(追加(。但是,我不确定该用哪个动词?我可以使用PATCH更新项目,但如果项目不存在,也可以创建项目吗?

我还想也许我应该使用PUT动词。但是,我在这里的理解是,这个动词只是用来替换资源,而不是更新它。我认为这不适合我的用户情况,因为更新时项目计数会增加,所以替换它不是我想要做的。但是,计数是在服务器端处理的,因此用户不能选择";替换";不管怎样,伯爵。

我在这里的理解是,这个动词只是用来替换资源,而不是更新它。

这是一个常见的理解-错误,但很常见。

IANA注册中心记录了http方法语义的权威参考。大多数常见的是由RFC 7231定义的;PATCH由RFC 5789定义。

当消息主体是您希望资源的完整表示时,PUT是一个合适的选择;保存文件";;PUT描述了客户端在保存文档时期望文档的样子。

使用PUT更新文档或创建文档是合适的,前提是客户端知道文档的标识符(就像我们可以使用save创建文件或替换文件一样,但我们需要知道文件名(。

如果你阅读了规范的文本,你会看到——虽然请求的语义是保存新的表示";"照原样";,服务器不需要这样做——毕竟,服务器控制着自己的文档——所以有空间覆盖只读字段,或者应该只由服务器更新的字段。您需要稍微注意响应标头,以避免暗示您按原样保存了表示,但除此之外,您应该没事。

最新更新