骨干集合,REST和裸阵列

时间:2012-07-25 13:29:28

标签: rest collections backbone.js hypermedia

在Backbone中,seems to be encouraged that collection resources return bare arrays。这似乎是driven by the Rails model of doing things,这不是在所有做某事的好理由。我有一些问题:

  1. 通常,“集合”资源也需要围绕它的上下文。至少,我喜欢在响应中包含资源URI的约定。其他的东西,如分页,小计(例如购物车)等,意味着收藏品很少“裸露”。
  2. Bare Arrays据称存在安全问题。我在一些地方听说过这个,但需要一些参考来证实。
  3. 另一方面,我可以看到“裸”数组如何使API更自然:

    1. 集合中每个对象的格式往往与创建/更新该集合中的对象时的格式相同。
    2. 一个'集合'在语义上很好地映射了一个项目集合的想法。
    3. 免责声明:这里的前提可能完全有缺陷。我意识到REST远远超过HTTP Verbs和JSON。

1 个答案:

答案 0 :(得分:2)

您引用的安全问题是由于脚本包含请求的JSON数组可以通过覆盖本机javascript数组类型来评估的CSRF漏洞。 Here's a good explanation of the vulnerability。 AFAIK,使用普通的JSON对象是不可能的。

但是,Backbone并不会阻止您收集回复。您可以在填充集合之前覆盖Backbone.Collection.parse以“解包”或以其他方式修改原始响应。

var MyCollection = Backbone.Collection.extend({
  model:MyModel,
  parse: function(response) {
    //Assume the response looks like { "data": [ ... ] }
    return response.data;
  }
});

我通常更喜欢包装集合响应,不仅是出于安全原因,还因为它允许API具有更大的灵活性和变化弹性。