0

私はRESTURLを持っています

/users/<user_id>/entities

その中に2つのオブジェクトを返します。

{
    "players":
    {
       "test_player2":
       {
           "_id": "test_player2",
           "user": "f07590567f3d3570b4f35b4fd79f18b3"
       },
       "test_playerX":
       {
           "_id": "test_player2",
           "user": "f07590567f3d3570b4f35b4fd79f18b3"
       }
    },
    "games":
    {
      "game1" :{},
      "game2" :{},
    }
}

このデータを使用するようにバックボーンオブジェクトを設計するにはどうすればよいですか?

要件:2つの異なるバックボーンオブジェクトが必要です。PlayerとGameで、同じURL(上記)を介して入力する必要があります。

PS:この種のREST URLを設計することは正しい習慣でさえありますか?

4

1 に答える 1

2

この種のRESTURLを設計することは正しい習慣でさえありますか?

いいえ、それは正しい習慣ではありません。RESTでは、単一のURLが単一のリソースを表すことになっています。したがって、/users/<user_id>/entitiesURLは/users/<user_id>/playersプレーヤーのリスト/users/<user_id>/gamesのみを返し、ゲームのリストのみを返す必要があります。

ただし、APIが何を返すかを制御できない場合があります。一般に、これはネストされたオブジェクトの場合です(あなたが持っているものでそれを行うことができるかもしれませんが、理想的には、APIを変更したいと思うでしょう):

{
    "players":
    {
        "id": 1,
        "games":
        {
           "id": 1745,
           "title": "Team Fortress 2"
        }
    }
}

この場合、次のparseようなモデルの関数を使用します。

parse: function(response)
{
    // Make sure "games" actually exists and is an array to make a collection from
    if(_.isArray(response.games))
    {
        // Backbone will automatically make a collection of models from an array
        // Use {parse: true} if you want the receiving collection to parse as if a fetch had been done
        this.games = new GamesCollection(response.games,{parse: true});
    }
}

をオーバーライドparseして使用することにより{parse:true}、モデルをほぼ無期限に構築できます。そのようにすることは必ずしも理想的ではありませんが(各コレクションが独自のモデルを担当するという考え方です)、複合オブジェクトを取得し、APIが返すものを変更できない場合に機能します。

于 2012-08-17T18:08:41.633 に答える