使用HATEOAS和Backbone.js

Pet*_*ete 12 rest hateoas backbone.js

我已经开始尝试使用Backbone.js,并对Backbone.Model上url属性的文档文档感到震惊.

特别是,我正在构建一个使用HATEOAS/hypermedia来驱动客户端的REST API.

我可以看到Backbone为集合中的项目构建URL本身的默认行为的有用性,但对于我的情况,我更倾向于使用已解析的数据构建模型URL.

有没有人在Backbone上扩展/构建它来做到这一点?也许建立在像HAL这样的"标准"上?

编辑:

为了澄清,让我说我有以下内容:

获取/订单>>

[
  {
     "_links": {
       "self": "/orders/123"
     }
     "name": "Order #123",
     "date": "2012/02/23"
  },
  {
     "_links": {
       "self": "/orders/6666"
     }
     "name": "Order #666",
     "date": "2012/03/01"
  },
]
Run Code Online (Sandbox Code Playgroud)

我有一个订单模型,如:

var Order = Backbone.Model.extend({
});
Run Code Online (Sandbox Code Playgroud)

我希望该url属性能够自动退出HAL中的"self"引用.我认为创建一个新的基础模型(未经测试):

var HalModel = Backbone.Model.extend({
  url: function() {
    return get("_links").self;
  },
});
Run Code Online (Sandbox Code Playgroud)

思考?

Mik*_*ike 10

我已经扩展了脊柱以完成这个,这里的库可用:

https://github.com/mikekelly/backbone.hal


tim*_*ham 4

感谢@Pete 的澄清。

我想我明白你的建议,并且我认为它可行。但是,在您的示例中,您首先必须知道/Ordersurl,然后才能获取订单。如果你重新设计你的 json 来拥有一个id属性,你就会非常接近骨干网的默认实现。

现在,如果您只想使用通用模型或基本模型(例如HALModel)并用数据引导它,那么您的方法可能很有用并且绝对可行。但是,我会考虑重写解析来提取 url 并将其设置在模型上:

parse: function(response) {
    this.url = response._links.self;
    delete response._links;
    return response;
}
Run Code Online (Sandbox Code Playgroud)