调用服务/方法的http动词

时间:2018-07-24 15:32:34

标签: rest web-services http

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

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

1 个答案:

答案 0 :(得分:0)

  

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

应根据HTTP request methods与定义的语义的对齐方式来选择它们。

其中最重要的是确定语义是否为safe

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

广告安全链接会邀请消费者预取链接,或者对其中找到的表示进行爬网和编制索引。

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

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

这两种方法都基于您的资源只是文档的错觉。我获取了您的资源的表示形式,然后将其加载到通用编辑器中,进行更改,将编辑后的表示形式发送回给您,然后由您决定是否显示这些更改。

但是不是必需的-如果您只是想记录一下

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

具有刷新系统缓存的副作用,仅在您将RPC引入其中的情况下,REST Police才会出现。

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

  

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

这就是说,POST始终是一个选择。

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

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

如果这些答案不令人满意,或者您只是在调查空间以了解可用的选项,则可以查看HTTP Method Registry。老实说,我从来没有找到我想要使用的东西。但是如果WebDAV是您的困扰......