我正在尝试为两个资源构建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协会?
答案 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有足够的资源来完成。