我们正在开发一款基于回合制的多人游戏,我们需要实施一些后端功能,以跟踪玩家数据和游戏。
我的第一种方法是使用NodeJS和MongoDB设计REST API,让客户端访问这些数据。我对Web服务的了解不多,但据我所知,REST涉及整个数据模型的信息交换。所以假设我有一个游戏模型,其中包含分数,棋盘状态和参与的玩家等信息,那么我不能只发送一个请求来检索某个游戏的分数,但我需要发送一个GET请求。游戏模型,然后从中读取分数,如:
GET http://restserver.com/games/12d3k351s
这是正确的还是我做错了假设?
如果是这种情况,我会多次检索一个完整的游戏列表,而不是他们的整个棋盘状态,这将是一个更大的数据块。将董事会状态分成不同的模型是否明智,例如,作为减少每个游戏信息请求传输的不必要数据量的手段?
如果我必须在没有REST API的情况下设计数据库,我肯定会将Board状态保留为Games集合中Game类的属性,所以这听起来不是最好的做法。
答案 0 :(得分:1)
我对json-api有很好的体验。它是REST-ish,涵盖了最近构建api服务器时可能出现的许多需求。具有部分获取的确切方案在那里被称为Sparse Fieldsets。
客户端 MAY 通过包含
fields[TYPE]
参数,请求端点在每个类型的响应中仅返回特定的fields。GET /articles?include=author&fields[articles]=title,body&fields[people]=name HTTP/1.1 Accept: application/vnd.api+json
答案 1 :(得分:1)
是否将棋盘数据与游戏数据一起存储无关紧要。您可以在没有电路板数据的情况下查询游戏数据。 MongoDB允许你这样做。
以下是一个例子:
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
这意味着“仅返回状态为'A'的库存商品的料品,状态和_id字段。”
你可以做到
db.games.find({}, { gameData: 1, gameStatus: 1 });
并获得所有游戏的gameData和gameStatus。
答案 2 :(得分:1)
这是正确的还是我做错了假设?
错误的假设。 REST API不是关于公开数据模型,而是关于如何公开集成协议。
绝对没有理由说你没有能够显示游戏当前得分的文件。
如果是这种情况,我会多次检索一个完整的游戏列表,而不是他们的整个棋盘状态,这将是一个更大的数据块。将董事会状态分成不同的模型是否明智,例如,作为减少每个游戏信息请求传输的不必要数据量的手段?
从这个问题开始 - 你会怎样做a web site?许多不同的适用文档,以及带语义提示的导航链接,以帮助消费者找到所需的文档。
那样做。