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 资源的新表示。