Javascript 带关联的RESTful API设计

Javascript 带关联的RESTful API设计,javascript,api,rest,backbone.js,Javascript,Api,Rest,Backbone.js,我正在尝试为两种资源构建一个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 那么这

我正在尝试为两种资源构建一个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
相反。对吗?人们通常如何处理宁静的联想

不确定你所说的“POST和PUT请求似乎会指向…”是什么意思。Backbone.js是否会自动向URL添加参数?如果是这样的话,您应该考虑对其进行配置,这样它就不会这样做,因为它在RESTAPI中不可用。restapi提供的链接应该是完整的,没有任何东西可以添加或删除

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


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

我能想到的RESTful API中关联的另一种选择是在GET users API响应中有电影ID列表,例如,名为“AssociatedMovieID”的属性,它具有与用户关联的电影ID的字符串数组。 这样,您的API将变成:

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

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

谢谢你,劳伦特。主干向URL追加一个id,以发布或将新模型放入它所属的集合。换句话说,集合将具有URL/api/users/1/movies,帖子将自动使用URL/api/users/1/movies/:id。对我来说,将帖子URL改为/api/movies/:id似乎更合适。。。但也许我错了。在服务器端,我还可以处理POST-to/api/users/1/movies/:id。
/api/users/
/api/users/:id

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