我正在开发一个在线游戏,角色可以对其他对象和角色执行复杂的动作.我正在构建一个REST API,并且在尝试遵循一些最基本的标准时遇到很多麻烦.我知道REST并不总是答案,但由于各种原因,我使用REST是有道理的,因为API的其余部分恰当地使用了它.
以下是一些棘手的例子:
GET/characters/bob/items这将返回Bob携带的项目数组.
我需要针对这些项目执行各种"操作",并且我很难将其建模为"资源".
以下是一些潜在的操作,具体取决于项目的性质:扔,吃,掉,保持
这很复杂,因为这些"操作"仅适用于某些项目.例如,你不能吃剑.此外,'eat'基本上具有"删除"资源的副作用.使用'throw'也可以'删除'资源.使用'drop'可以将资源"转换"为另一种资源类型.'投掷'要求我提供'位置'."保持"要求我提供哪一只手来容纳物品.那么如何将这些操作建模为资源?它们都不是"相似的",因为它们各自需要不同的参数并导致完全不同的行为.
目前,我有一个'actions'资源,我将这些任意操作发布到.但这感觉太过RPC和非标准/可发现:
POST/actions/throw {characterId:5,itemId:10,x:100,y:150}