如何在REST API中最好地表示动态游戏动作



我想创建一个简单的卡牌游戏,并把所有的游戏逻辑服务器端。然后,客户端应用程序将通过REST API与后端交互。

我已经找到了它的一部分,但是我正在努力如何实现这种API的动态动作。

例如,我有这样的动作:

    <
  • 开始游戏/gh>
  • 翻牌
  • 检查用户猜测
  • 暂停游戏
  • 结束游戏

特别是,我该如何处理开始或暂停游戏?我可以这样做:

POST /games/123/start
POST /games/123/pause

但这不是很RESTful,因为URL的最后一部分将是动词而不是名词。而且,也没有数据需要POST。

我该如何实现这种动态动作呢?任何建议吗?

RESTful api—其中动词由HTTP方法完全描述,资源由URL完全描述—当您的主要操作是CRUD或SQL(插入、选择、更新、删除)时效果最好。因此,请考虑如何以类似crud的方式描述这些操作:

    开始一款游戏就像创造一款游戏。它会在创建时立即启动:
    POST /games
  • 暂停游戏可以被视为将游戏移至"暂停游戏"类别:
    PUT /games/paused/123
  • 结束游戏就像删除游戏:
    DELETE /games/123
    或者至少把它从"活跃"游戏中删除:
    DELETE /games/active/123

最后由你来设计你认为最适合的API。大多数现实世界的"RESTful"api都不是100% RESTful的。在某种程度上,设计的纯粹性必须让位于实用主义。

我的建议:保持GET s, PUT s, DELETE s等(所有不是POST的)幂等。 POSTs应该是唯一的非幂等HTTP方法

在我看来,我会推荐这样的路由:
PUT /games/213
与内容:
{game: {paused: false}}

如果游戏不进行,则暂停。我不知道你的模型是什么样的,但我可以想象所有的游戏都是在暂停状态下创建的,然后我可以运行上面的请求来启动它。

同样,PUT也可以是POST

最新更新