REST设计:使用REST从给定实体添加/删除相关实体
假设我有一组用户,我想在组中添加/删除用户。我所困惑的是,设计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,因为我在某本书中读到(这个名字我想不起来),当使用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
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
发布来完成,其中包含创建者的位置