我正在开发一种 RPG 游戏。我想弄清楚
一种定义库存 API 的漂亮、干净和 RESTful 方式。
库存包括几个slots
喜欢 head
, chest
等等(就像在大多数 RPG 游戏中一样)。
现在我需要定义 REST API 以将所有项目从插槽 X 移动到插槽 Y。
我有几个想法:
/inventory
/inventory/movement
一样并拥有一个 CREATE
就可以做到CRUD
.所以它会是 POST /inventory/movement
.这将是 CRUD 和 REST,但感觉非常糟糕。 PUT /inventory?move_from=A&move_to=B
.这感觉还是不太好。 所以.. 对此有一个干净的 CRUD REST 解决方案吗?
更新:刚刚有另一个:
PUT /inventory/:to_slot?from=:from_slot
- 还不确定。当涉及 2 个时,为什么只在一个插槽上执行操作?嗯……呃!
最佳答案
由于在 REST 中,您应该始终对资源或资源集合进行操作,因此在这种情况下,我会考虑“”。搬家 ' 操作作为 REST 资源。起初这可能看起来不正确,因为我们考虑了 ' 搬家 ' 是动词而不是名词,但是如果界面包含高级别的抽象,这可能是有意义的。在向用户公开可用于控制游戏的选项的高级界面中,您可能希望对“”采取行动。移动选项 ',突然变成了名词!
因此,我将使用 POST 动词来移动库存中的项目,因为我们将发出创建新的“”的请求。搬家 ' 行动。考虑以下不言自明的例子:
- POST /move/inventory/a/b
- POST /sell/inventory/a
- POST /use/inventory/b
' 搬家 ' 原始 CRUD 操作中的命令通常使用 CREATE 后跟 DELETE 来实现。但是,我认为如果您要在这样的游戏资源上使用原始 CRUD 操作,您会发现它太低级了。
如果您要从 x 获取一个项目并将其放入 y,您会将检查 y 是否为有效目的地的验证逻辑放在哪里?它应该在模型中(在界面后面)还是在你的游戏中?如果它应该在模型中,那么我认为您应该考虑我之前描述的高级方法。另一方面,如果您打算在游戏中(在界面前)处理此逻辑,那么您可以采用原始 CRUD 方法,如 Jan suggested in another answer .
请注意,如果您的 RPG 将面向 Web,则您必须在服务器端处理游戏逻辑。在这种情况下,我会寻求将 REST 界面与提示给用户的控件和选项一一对应——同样,我会建议上面提出的高级模型。
关于ruby-on-rails - 我需要一个 RESTful 实现 RPG 游戏库存 API 的想法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2316803/