1
  • 如果/users/{username}是(一个不能没有另一个就不能存在)的别名/users/{userId}那么我期望删除前者意味着您要删除后者。
  • 如果/lists/{listId}/users/{userId}是对(一个可以不存在另一个)的引用/users/{userId},那么我希望能够在不影响规范资源的情况下删除该引用。
  • 在这两种情况下,调用HTTP GET都会导致规范资源的HTTP 303 。

我认为这两种类型的行为相同HTTP GET但对于HTTP DELETE.

这导致我提出以下问题:

  1. 在别名HTTP DELETE上调用时会发生什么?
  2. 从列表中删除引用而不删除它们指向的实际对象的适当方法是什么?
4

2 回答 2

0

5.3.5。删除

DELETE 方法请求源服务器删除目标资源。此方法可能会被源服务器上的人工干预(或其他方式)覆盖。即使从源服务器返回的状态码表明操作已经成功完成,客户端也不能保证操作已经执行。但是,服务器不应指示成功,除非在给出响应时它打算删除资源或将其移动到无法访问的位置。

**> 如果响应包含一个成功的响应应该是 200(OK)

描述状态的表示,如果尚未执行该操作,则为 202(已接受),如果已执行该操作但响应不包含表示,则为 204(无内容)。**

所以:

如果 /users/{username} 是 /users/{userId} 的别名(没有另一个就不能存在)那么>我希望删除前者意味着您要删除后者

当对别名调用 HTTP DELETE 时会发生什么?

必须删除“两个”资源。据我了解,如果没有其他人就不能存在,它们只是同一资源的不同标识符,因此在删除其中一个之后,必须用 404 Not Found 来回答这两个请求。

从列表中删除引用而不删除它们指向的实际对象的适当方法是什么?

更新:

我的问题是应该使用什么 HTTP 方法来指示客户端想要从列表中删除引用?

如果用户(客户端?)想在不删除实际资源的情况下从列表中删除引用,那么只有一种方法 - 客户端必须将带有修改列表的 PUT 请求发送到服务器,这意味着必须用新列表替换现有列表。如果用户没有足够的权限,可以返回“403 Forbidden”作为响应。

如果资源(即本例中的列表)应该缓存在客户端并且删除一些其他资源会影响此列表,则要执行此操作的相反操作(即在列表更改时通知用户),我能想到的唯一方法是“通知" 用户将使用缓存。例如:

要求

GET /list HTTP/1.1
Host: service.org

回复

HTTP/1.1 200 OK
Content-Type: application/...
Content-Length: ...
Cache-Control: private, max-age=0
ETag: a32lasdf

在上述 Cache-Control 标头值“private, max-age=0”的响应中,客户端可以在本地缓存表示,但每次都必须向服务器发送以下请求:

要求

GET /list HTTP/1.1
Host: service.org
If-None-Match: a32lasdf

如果 /list 资源未被触及,则 ETag 值将匹配“If-None-Match”值,服务器可以以“304 Not Modified”响应,客户端不需要做任何事情。但是,如果之前的删除操作影响了 /list,ETag 的哈希码将与“If-None-Match”标头提供的哈希码不同,因此服务器将返回 /list 资源的新表示。

于 2012-12-06T20:04:08.783 回答
0

URI 是对资源的引用,而不是资源本身。从某种意义上说,它们都是规范的。不同的 URI 可以标识相同的资源。他们也可能是一些甚至还不存在的东西的持有者。“一个不能没有另一个”的概念是特定于应用程序的,它不是 REST 约束。理想情况下,您不会有相互依赖的 URI。如果删除资源,所有指向它的 URI 都将指向任何内容。或者至少如果 URI 指向资源而不是彼此,那么事情应该是这样的。

更新:

根据RFC2396

1.1 URI概述:

...

资源

资源可以是任何具有身份的东西。熟悉的示例包括电子文档、图像、服务(例如,“洛杉矶今天的天气报告”)以及其他资源的集合。并非所有资源都是网络“可检索”的;例如,图书馆中的人、公司和装订书籍也可以被视为资源。

资源是到一个实体或一组实体的概念映射,不一定是在任何特定时间实例对应于该映射的实体。因此,资源可以保持不变,即使它的内容——它当前对应的实体——随着时间而改变,只要概念映射在过程中没有改变。

标识符

标识符是一个对象,它可以作为对具有身份的事物的引用。 在 URI 的情况下,对象是具有受限语法的字符序列。

更新:

我想,如果资源可以通过多个 URI 访问/修改,则由应用程序指定一个规范的(将包含在响应超文本中的 URI)。但是,是的,不规范的是 URI(从应用程序的角度来看),而不是资源。

于 2012-12-06T21:23:12.180 回答