5

我正在尝试为两种资源构建 API,一种与用户有关,另一种与电影有关。两种资源都有关联——一个用户将有多个电影,而一个电影将有多个用户。据推测,我会这样设计我的 API:

/api/users/
/api/users/:id
/api/users/:id/movies

/api/movies/
/api/movies/:id
/api/movies/:id/users

但问题是:我还在客户端使用 Backbone.js 来获取 API 数据。如果我在

/api/users/:id/movies

那么这将适用于 GET 请求,但 POST 和 PUT 请求似乎会被定向到:

/api/users/:id/movies/:id

但是,看起来,如果它被发布到会更好

/api/movies/:id

反而。那是对的吗?人们通常如何处理 RestFul 联想?

4

2 回答 2

1

不确定您所说的“POST 和 PUT 请求似乎会被定向到......”是什么意思。Backbone.js 会自动为 URL 添加参数吗?如果是这样,您应该考虑对其进行配置,使其不会那样做,因为它不能与 REST API 一起使用。REST API 提供的链接应该是完整的,没有什么可以添加或删除的。

最后,如果您想将电影与用户相关联。您可以将电影(或只是其 ID)发布到:

/api/users/:id/movies
于 2012-07-05T06:48:12.720 回答
1

它是正确的。这是因为“电影”独立于“用户”。电影可以在没有用户的情况下存在,所以它们的关系实际上是“关联的”。要创建电影,您根本不需要用户,因此将创建电影的 POST URI 设置为“POST /api/movies”更有意义。

我能想到的 RESTful API 中关联的替代方法是在 GET 用户 API 响应中包含电影 ID 列表,例如,名为“associatedMovieIDs”的属性具有与用户关联的电影 ID 字符串数组。这样,您的 API 将变为:

/api/users/
/api/users/:id

/api/movies/
/api/movies/:id
于 2020-10-08T06:43:47.247 回答