RESTful API 设计和 CQRS

Ind*_*ndu 5 rest cqrs

我在考虑如何让 RESTFul API 更能揭示意图。我在各种博客中看到的一个常见模式是,传统的 REST API 导致

禁止玩家 -> POST /players.

但是我要改成一个更能揭示意图的界面,我可以使用

禁止玩家 -> POST /players/{ playerid }/banPlayer

我觉得第二个更能揭示意图。

我从团队那里得到的普遍反对意见是第二个不符合 start REST 风格。

此外,目前我无法摆脱 RESTful API。

我想听听您对此的看法。

she*_*nku 8

对于 Restful API 设计,关于如何应用于actions资源有两种思想流派。

  1. 您描述了要对 Uri 中的资源采取的操作:

    请求 Uri:
    POST /players/{id}/ban

    注意:只需使用ban- 我们已经知道资源是一个玩家,它在基础 Uri 中。

  2. 您可以在请求正文中执行操作:

    请求 Uri:
    POST /players/{id}

    请求正文:
    { 'action': 'ban' }

您可以选择任何一种方式 - 无论您喜欢哪种方式,都有很多关于两者的讨论,但最终两者都是正确的。

笔记:

我在这里假设禁止玩家不仅仅是更新其中的一部分,而是与玩家相关的系统操作(或状态转换)。否则,如果它只是对播放器资源的更新,则应酌情使用 PATCH 或 PUT 进行处理。

一些讨论供参考:

如果你做一些谷歌搜索,还有更多......

  • 考虑使用`PATCH`而不是`POST`,我会赞成。 (3认同)
  • @QualityCatalyst 我在这里的假设是禁止玩家不仅仅是更新其中的一部分,而是与玩家相关的系统操作。否则我会同意,你也会一起摆脱“禁止”Uri 部分。 (2认同)