具有关联的RESTful API设计

时间:2012-07-05 04:25:09

标签: 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

然后这对GET请求很有效,但POST和PUT请求似乎会被引导到:

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

但是,看起来如果发布到

会更好
/api/movies/:id

代替。那是对的吗?人们如何处理RestFul协会?

3 个答案:

答案 0 :(得分:1)

不确定你的意思是“POST和PUT请求似乎会被引导到......”。 Backbone.js会自动为URL添加参数吗?如果是这样,您应该考虑配置它以使它不这样做,因为它不能用于REST API。 REST API提供的链接应该是完整的,没有任何内容可以添加或删除。

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

/api/users/:id/movies

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:-3)

据我所知,您正试图找出一些可读且标准的创建REST服务URL的方法。真实的故事是服务网址与API设计完全不同。

服务网址可能如下所示:

/ api / getMovies / userId:涉及获取请求

/ api / updateMovieList / userId:涉及帖子

这更直观,更具自我表现力。

This site有足够的资源来完成。