首页 > 解决方案 > http动词调用服务/方法

问题描述

定义代表非 REST 命令调用的 Web 服务的最佳实践是什么?

对于 REST,基本上我们使用 POST 创建新记录,使用 GET 检索记录,使用 PUT 更新记录,使用 DELETE 删除记录。如果我只想调用其他一些非资源函数,例如刷新系统缓存,我应该使用哪个 http 动词?

标签: restweb-serviceshttp

解决方案


如果我只想调用其他一些非资源函数,例如刷新系统缓存,我应该使用哪个 http 动词?

HTTP请求方法的选择应基于它们与定义的语义的一致性。

其中最重要的是确定语义是否安全

如果定义的语义本质上是只读的,则请求方法被认为是“安全的”;即,客户端不请求也不期望由于将安全方法应用于目标资源而导致源服务器上的任何状态更改。同样,合理使用安全方法预计不会对源服务器造成任何伤害、财产损失或异常负担。

为安全链接做广告会邀请消费者预先获取链接,或者抓取并索引在那里找到的表示。

如果让 Google 和她最亲密的十亿朋友刷新您的系统缓存听起来很昂贵,那么您可能不想要一个安全的方法。

PUTPATCH是具有操纵表示的语义的不安全方法。因此,如果您有一个描述系统缓存的模式,客户端可能会在实体主体中放置一个空缓存的表示,并将其发送给您,然后您可以刷新缓存。您可以使用 PATCH 实现类似的功能,发送进行更改所需的编辑列表。

这两者都依赖于您的资源只是文档的错觉。我得到你的资源的一个表示,我将它加载到我的通用编辑器中,进行更改,将我编辑的表示发回给你,然后由你来显示这些更改(或不显示)。

但它们不是必需的——如果你想简单地记录一下

PUT /df1645af-f960-4cc4-ad7a-d0ddd29903f8
Content-Length: 0

具有刷新系统缓存的副作用,REST Police 不会仅仅因为您在混合中引入了一些 RPC 就来追随您。

当然,如果您使用 HTML 执行此操作,那么您唯一的选择就是POST

POST 方法请求目标资源根据资源自己的特定语义处理请求中包含的表示。

也就是说,POST 始终是一种选择。

很容易想象这个流程——加载一些书签,点击系统缓存链接,找到一个带有刷新缓存按钮的表单,然后提交。浏览器将按照表单元素中的描述创建请求并提交它。

所以也会很好。REST 警察不会为此打扰您,因为该协议实际上是 RESTful 的。

如果这些答案不令人满意,或者如果您只是调查空间以了解可用的选项,您可以查看HTTP 方法注册表。老实说,我从来没有在那里找到我想要使用的任何东西。但是如果WebDAV是你的果酱......


推荐阅读