0

我有一个 REST URL,比如说

/users/<user_id>/entities

它在其中返回 2 个对象:

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

如何设计我的主干对象以使用这些数据?

要求:我想要两个不同的 Backbone 对象:Player 和 Game,它们应该通过相同的 url 填充(如上所述)。

PS:设计这种 REST URL 甚至是正确的做法吗?

4

1 回答 1

2

设计这种 REST URL 甚至是正确的做法吗?

不,这不是正确的做法。在 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 回答