8

除了简单的创建 (POST)、读取 (GET)、更新 (PUT) 和删除 (DELETE) 之外,使用 REST 执行操作是否合适?我对整个 RESTful 神学有点陌生,所以请耐心等待,但我应该如何完成以下工作:

  • 我有一个需要与另一个 Web 服务通信的 Web 服务。Web 服务 A 需要在 Web 服务 B 上“保留”一个对象。该对象具有有效期超时,但如果需要可以立即删除。它本质上是一个美化的权限系统,它要求 Web 服务在执行任何操作之前在 Web 服务 B 上保留一个空间。

我最初的想法是 1. 启用某种身份验证,2. 在服务器端对 GET 调用的响应中,保留空间并返回结果,以及 3. 通过 DELETE 调用立即“取消保留”对象。这仍然是 RESTful 吗?

4

3 回答 3

3

是的,休息时执行动作是可以的。重要的是这些行动应该以你交换的陈述为指导。

如果您考虑 Web 的工作方式(通过浏览器),您会一直这样做:您会得到一个 HTML 表单,让您选择可以执行的许多操作。然后,您提交表单(通常通过POST)并执行操作。

能够DELETE通过程序化客户端使用很好(这是浏览器中的非 AJAX 请求不支持的),但 RESTful 系统的整体方法应该与您在网站上找到的方法非常相似(即焦点应该是关于表示:相当于你系统中的网页)。

GET不应该有副作用,所以不要使用GET自己进行预订,而是使用类似的东西POST

于 2011-07-13T22:07:17.790 回答
2

不 - 不太可能是安宁的

从你的描述...

2.在服务端响应GET调用,预留空间并返回结果

GET 应该是幂等的。仅出于这个原因,您的服务不太可能是安静的,因为第一次 GET 后系统的状态不同。

您确实需要考虑Reservation 是一种资源,并且应该使用 POST 创建到保留容器,该容器将在 HTTP 响应的 Location 标头中返回新资源的 URI。Get 可以使用此 UrI 来返回资源并使用 PUT 进行更新

Post 应该用于扩展现有资源,Put 用于替换资源的状态。在您的情况下,请考虑 Post 正在更新 Reservations 列表并返回新资源的 URI(不仅仅是 I'd)。Put 可用于更改与 UR 标识的资源关联的状态

于 2011-07-13T22:15:18.907 回答
0

您走在正确的轨道上,但您对对象的预订应使用 PUT;您正在对对象进行保留,即更改基础对象。

PUT 在这里是正确的动词,因为您知道要修改什么资源,并且对于多个请求它应该是幂等的。

于 2011-07-13T22:08:29.290 回答