1

在 Backbone 中,似乎鼓励收集资源返回裸数组。这似乎是由 Rails 做事模型驱动的,这根本不是做某事的好理由。我对此有一些问题:

  1. 通常,“集合”资源也需要围绕它的上下文。至少,我喜欢在响应中包含资源 URI 的约定。其他东西,如分页、小计(例如在购物车中)等,意味着集合很少是“裸露的”。
  2. 据说裸阵列存在安全问题。我在几个地方听说过这个,但需要一些参考来确认它。

另一方面,我可以看到“裸”数组如何使 API 更自然:

  1. 集合中每个对象的格式往往与在该集合中创建/更新对象时的格式相同。
  2. “集合”在语义上很好地映射到项目集合的概念。

免责声明:这里的前提可能完全有缺陷。我意识到 REST 不仅仅是 HTTP 动词和 JSON。

4

1 回答 1

2

您引用的安全问题是一个 CSRF 漏洞,原因是脚本包含请求的 JSON 数组可以通过覆盖本机 javascript Array 类型来评估。 这是该漏洞的一个很好的解释。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 具有更大的灵活性和更改弹性。

于 2012-07-25T14:59:00.737 回答