【发布时间】:2013-05-09 11:32:44
【问题描述】:
我有一个名为 User 的 Backbone 模型,它的 urlRoot 为 /api/users。因此,如果我创建一个 ID 为 5 的新模型,则 url 将是 /api/users/5。
我还实现了另一个端点,用于获取单个用户的 Twitter 朋友。这个端点是/api/users/:id/twitter-friends
我是否需要用这个url 创建一个新集合,并手动设置id,或者我是否可以在我的模型上创建一个方法来发出这个请求并返回一个新的集合实例(该用户的推特朋友)。例如:
var user = new User({ id: 5 })
user.findTwitterFriends() // returns collection of users
或者,为此类数据创建一个独特的集合:
var user = new User({ id: 5 })
var users = new Users()
users.url = user.url() + '/find-friends/twitter' // /api/users/5/find-friends/twitter
users.fetch()
以这种方式处理 URL 的最佳做法是什么?有没有更好的办法?我对其他用途也有类似的需求,例如我的 API 端点可以通过用户名/api/users/username/:username 获取用户。为此,我必须手动设置 urlRoot:
var user = new User({ username: username })
user.urlRoot = user.urlRoot + '/username/' + username
user.fetch()
也许我应该以不同的方式设计我的网址?我愿意接受所有建议。
【问题讨论】:
-
为什么不将用户集合作为字段添加到用户中?这样,您可以将父用户的 id 保留为集合中的一个字段并生成这样的 url(在集合内):
url:function() { return '/api/users/'+this.parentUser.id+'/twitter-friends'; } -
顺便说一句,BackboneRelational 维护这种关系,我个人用的比较多,推荐这种场景使用
-
我更喜欢你的第一个选项,你也可以返回一个 Promise 对象而不是朋友的集合,有人知道哪个更好吗?
标签: javascript api rest backbone.js