我正在为我的Web应用程序构建一个API,目前为止已经公开了我的应用程序使用的所有资源,例如/users/roles/posts等都没有问题。

我现在停留在如何以RESTful方式公开有关其中某些资源的统计信息上。 拥有statistics资源似乎不正确,因为GET /statistics/1可以是任何东西,并且结果可能会更改每个请求,因为统计信息是实时的,因此将不可缓存。

背景:

对于系统中的每个/users,应用程序都会定期向Steam的API查询其正在播放的/games和正在播放的/servers,并将此信息以及时间戳存储在/states资源中。

汇总此信息可以显示/statistics/games/current-usagestatistics/servers/current-usage标准HTML页面上最受欢迎的游戏和服务器。说明性屏幕截图:serversgames(在不同时间拍摄)。

编辑:基本资源的样本数据

"state": {
    "id": 292002,
    "user_id": 135,
    "game_id": 24663,
    "server_id": 135,
    "created_at":"2014-06-22 21:12:03"
},
"user": {
    "id": 112,
    "username": "ilumos",
    "steam_id_64": "76561197970613738"
},
"server": {
    "id": 135,
    "application_id": 24663,
    "name": null,
    "address": "192.168.241.65",
    "port": "0"
},
"game": {
    "id": 24663,
    "name": "DEFCON",
    "steam_app_id": 1520
}

编辑2:REST是否允许使用时间戳作为资源标识符的端点? ,例如:
GET /statistics/1403681498/games得到这样的响应:
[
    "game": {
        "id": 123,
        "name": "DEFCON",
        "users": [
            {
                "id": 7654,
                "username": "daryl",
                "server": {
                    "id": 127,
                    "ip": "123.123.123.123",
                    "port": "27960"
                }
            },
            {
                "id": 135,
                "username": "ilumos"
            },
        ]
    }
]

最佳答案

您有各种并非完全不合理的选择。

你可以

  • 在每个响应中包含统计信息。所有客户都会想要吗
    统计数据?有很多统计数据吗?如果您要跟踪的只是玩家数量,则类似GET/games?orderBy = numPlayers-&offset = 0&limit = 10的方法可能会起作用。
  • 具有/statistics/{statisticId}端点。这并不是天生的RESTful。
  • 具有/games/{gameId}/statistics端点。
  • 具有/statistics/games/{gameId}端点。

  • 确实,我们没有办法告诉您实现此目标的最佳方法是什么,因为我们没有足够的信息。

    关于rest - 如何通过RESTful API公开有关资源的统计信息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24392641/

    10-12 07:20