web-services - 在 REST 中处理添加/删除多对多关系的正确方法是什么?

标签 web-services http rest many-to-many

假设我们有一个包含服务器上用户列表的实体,我们希望将其公开为 rest。正确的做法是什么?

我的第一个猜测是这样的:

/entity/1/user/5

我们可以使用 PUT 进行更新,使用 DELETE 进行删除吗?

这样对吗?我去了维基百科,那里谈论休息,他们的观点是一切都只有 1 层深。所以也许他们希望您使用 PUT/POST 并提供整个 JSON 图并一次性更新整个内容?

最佳答案

您的示例是一种完全有效的方法。 然而,在许多情况下,User 可以存在于 entity 的上下文之外。我倾向于孤立地识别资源,例如:

/entity/1
/user/5

要查看与我将使用的实体关联的用户:

/entity/1/users

可以通过 POST 用户来添加用户,

POST /entity/1/users
<User>
...
</User>

删除一个用户会是

DELETE /User/5

可以使用 PUT 来更新或创建用户

PUT /User/6

移除用户和实体之间的关联需要一点创造力。你可以做

DELETE /Entity/1/User/5 

按照你的建议,或者类似的

DELETE /Entity/1/UserLink?UserId=5

或者只是

DELETE /Entity/1/Users?UserId=5

对于您的 API 用户来说,您的 URI 是什么样子实际上并不是很重要。为了您自己的理智保持一致是件好事,选择易于使用您的服务器框架进行分派(dispatch)的方案是件好事,但重要的不是您的 URI 看起来像什么,而是您用它们做什么。

关于web-services - 在 REST 中处理添加/删除多对多关系的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4521452/

相关文章:

java - WS 发送生成的 xml 中的 multiRef

http - 使用 shell/bash 脚本读取 HTTP 输出

spring - 如何在 Spring Boot 应用程序中关闭 Spring Security

c# - Azure - 为列表 blob 调用存储休息 api

c# - 如何让 WCF 服务运行在 SSL 上?

java - 创建 JAX-WS 客户端以利用 .NET Web 服务(需要身份验证)

asp.net - 信用卡 - 文件服务卡?

php - PHP 中的 CardDAV 服务器

javascript - 使用 Javascript 捕获 HTTP 请求

node.js - Express.js : Is this a RESTful interface?