REST设计:使用REST从给定实体添加/删除相关实体

REST设计:使用REST从给定实体添加/删除相关实体,rest,jersey,jax-rs,restful-architecture,Rest,Jersey,Jax Rs,Restful Architecture,假设我有一组用户,我想在组中添加/删除用户。我所困惑的是,设计URL的最佳实践是什么。以下是选项 选项1 POST/groups/{groupId}/users——请求主体将包含userId DELETE/groups/{groupId}/users/{userId}——userId将位于路径中,请求正文将为空 选项2 DELETE/groups/{groupId}/users——请求主体将包含userId POST/groups/{groupId}/users/{userId}——userId

假设我有一组用户,我想在组中添加/删除用户。我所困惑的是,设计URL的最佳实践是什么。以下是选项

选项1

POST/groups/{groupId}/users——请求主体将包含userId DELETE/groups/{groupId}/users/{userId}——userId将位于路径中,请求正文将为空

选项2

DELETE/groups/{groupId}/users——请求主体将包含userId POST/groups/{groupId}/users/{userId}——userId将位于路径中,请求正文将为空

我相信这两个答案都是正确的,我猜这里没有正确或错误的答案,只是个人偏好。但我想知道什么被广泛使用。我一直在使用选项#1,因为我在某本书中读到(这个名字我想不起来),当使用
DELETE
时,您正在发布的数据不应该是
url
的一部分,没有这样的最佳实践约束


感谢所有的投入

选项1似乎是最常见的选项。我觉得选项2一点也不有效

选项1似乎是最常见的选项。我觉得选项2一点也不有效

选项1似乎是最常见的选项。我觉得选项2一点也不有效

选项1似乎是最常见的选项。我觉得选项2一点也不有效

第一种选择是最常见的,但这并不意味着什么,因为对REST的误解很普遍。事实上,#1根本不是REST,它是纯粹而简单的RPC

将成员添加到集合中可以通过向集合
/groups/{groupId}/users
发送
POST
,将创建的资源的位置返回到
location
响应头中,或者通过
PUT
请求到最终位置
/groups/{groupId}/users/{userId}
POST
应该返回一个
201创建的
响应,如果资源已经存在并且被新的资源替换,则
PUT
应该返回该响应或
200 OK


要删除,正确的方法是使用
delete/groups/{groupId}/users/{userId}
。这不是个人喜好的问题
POST
是一种用于HTTP协议未标准化的操作的方法。通过
DELETE
方法对简单删除进行标准化。通过
POST
方法实现它只意味着您必须记录该功能,而不是依赖于标准本身。只有当你在删除过程中做了一些花哨的事情时,你才会使用
POST
,而这些事情已经需要记录功能了。

第一个选项是最常见的,但这并不意味着什么,因为对REST的误解很普遍。事实上,#1根本不是REST,它是纯粹而简单的RPC

将成员添加到集合中可以通过向集合
/groups/{groupId}/users
发送
POST
,将创建的资源的位置返回到
location
响应头中,或者通过
PUT
请求到最终位置
/groups/{groupId}/users/{userId}
POST
应该返回一个
201创建的
响应,如果资源已经存在并且被新的资源替换,则
PUT
应该返回该响应或
200 OK


要删除,正确的方法是使用
delete/groups/{groupId}/users/{userId}
。这不是个人喜好的问题
POST
是一种用于HTTP协议未标准化的操作的方法。通过
DELETE
方法对简单删除进行标准化。通过
POST
方法实现它只意味着您必须记录该功能,而不是依赖于标准本身。只有当你在删除过程中做了一些花哨的事情时,你才会使用
POST
,而这些事情已经需要记录功能了。

第一个选项是最常见的,但这并不意味着什么,因为对REST的误解很普遍。事实上,#1根本不是REST,它是纯粹而简单的RPC

将成员添加到集合中可以通过向集合
/groups/{groupId}/users
发送
POST
,将创建的资源的位置返回到
location
响应头中,或者通过
PUT
请求到最终位置
/groups/{groupId}/users/{userId}
POST
应该返回一个
201创建的
响应,如果资源已经存在并且被新的资源替换,则
PUT
应该返回该响应或
200 OK


要删除,正确的方法是使用
delete/groups/{groupId}/users/{userId}
。这不是个人喜好的问题
POST
是一种用于HTTP协议未标准化的操作的方法。通过
DELETE
方法对简单删除进行标准化。通过
POST
方法实现它只意味着您必须记录该功能,而不是依赖于标准本身。只有当你在删除过程中做了一些花哨的事情时,你才会使用
POST
,而这些事情已经需要记录功能了。

第一个选项是最常见的,但这并不意味着什么,因为对REST的误解很普遍。事实上,#1根本不是REST,它是纯粹而简单的RPC

向集合中添加成员可以通过向集合
/groups/{groupId}/users
发布
来完成,其中包含创建者的位置