web-services - 在不影响 REST 子资源的情况下更新资源的正确 HTTP 方法

标签 web-services api rest

假设我有两个实体 - 项目团队和员工。每个员工可以是多个团队的一部分,每个团队可以有多个员工作为团队成员。我需要提供 REST API 来操纵团队、员工以及他们之间的关系。

我已经确定了 3 种资源 - 团队、员工和成员(团队和员工之间的关联),这是团队的子资源。我选择将 member 作为子资源的原因纯粹是基于该资源的生命周期。每当团队被移除时,成员也会被移除,而且他们在团队之外没有任何意义。

我公开了以下 API(相关的):

  • POST/teams 创建带有名称、部门 ID 等的新团队记录
  • POST/teams/{name}/members 在由名称标识的团队和特定员工之间创建关联,因此输入数据包含员工 ID

我还需要提供 API 以在一次请求中更新团队的部门 ID 和其他属性。看起来 PUT 是自然选择,但 PUT 的语义非常清楚——我必须替换整个资源,在这种情况下意味着替换所有成员子资源。

当我只想更新团队的属性同时保留成员关联时,我应该使用什么方法(或方法)?请记住,我也希望这个请求是幂等的。

最佳答案

Looks like PUT is natural choice but semantics of PUT is pretty clear - I have to replace whole resource, which in this case means replacing all members sub-resources as well.

我以前从未听说过有人建立这种联系。如果执行 PUT/Foo 在我看来它绝对没有说明 /Foo/bar。仅仅因为可以通过分层 URI 空间访问资源并不能推断出这些资源之间的任何其他关系。

我听说有人在做相反的场景,你做 PUT/Foo/bar 如果服务器知道这会影响 /Foo 的状态,你可以包含指向 /Foo 的 Content-Location header ,以允许智能缓存使 /Foo 无效。但是,需要 Content-Location 来显式创建两个资源之间的关系。

关于web-services - 在不影响 REST 子资源的情况下更新资源的正确 HTTP 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6246442/

相关文章:

android - 如何在 Kotlin 中获取 Retrofit 的原始 json 响应?

javascript - 无法从 Strapi 中的 "SINGLE-TYPE"内容类型获取 json 数据

java - spring工具套件休息服务不引用函数

android - 使用改造参数 `soap12:Body` 使用 xml webservice 在类中没有匹配项

java - REST Web 服务 JSON 格式

php - 在我的网站上使用 Google Calendar API

android - 在我的 Android 应用程序中播放 IMDB 视频?

java - Spring-ws XML 炸弹保护,有人知道吗?

php - Symfony JSON 登录 - session 与 token

java - 如何访问 POST 正文中发送的转换后的 JSON 对象的字段?