1

Backbone では、コレクション リソースがベア アレイを返すことが奨励されているようですこれは、Rails の実行モデルによって推進されているように思われますが、これは何かを実行する正当な理由にはなりません。これにはいくつかの問題があります。

  1. 多くの場合、「コレクション」リソースには、その周りのコンテキストも必要です。少なくとも、リソースの URI を応答に含めるという規則が気に入っています。ページング、小計 (たとえば、ショッピング カート内) などの他のことは、コレクションが「むき出し」になることはめったにないことを意味します。
  2. ベア アレイにはおそらくセキュリティ上の問題があります。いくつかの場所でこれを聞いたことがありますが、それを確認するにはいくつかの参照が必要です.

一方で、「そのままの」配列が API をより自然にする方法は次のようにわかります。

  1. コレクション内の各オブジェクトの形式は、そのコレクション内のオブジェクトを作成/更新するときの形式と同じになる傾向があります。
  2. 「コレクション」は、アイテムのコレクションという概念に意味的によく対応しています。

免責事項: ここでの前提は完全に間違っている可能性があります。REST は、HTTP 動詞や JSON よりもはるかに優れていることを認識しています。

4

1 に答える 1

2

あなたが引用するセキュリティの問題は、スクリプト インクルードによって要求された JSON 配列が、ネイティブの JavaScript 配列タイプをオーバーライドすることによって評価できるという事実によって引き起こされる CSRF 脆弱性です。 脆弱性についての適切な説明は次のとおりです。私の知る限り、これはプレーンな JSON オブジェクトでは不可能です。

ただし、Backbone は、コレクション レスポンスをラップすることを妨げません。Backbone.Collection.parse をオーバーライドして "unwrap" にするか、コレクションにデータが入力される前に未加工の応答を変更できます。

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 に答える