【发布时间】:2014-01-18 05:38:18
【问题描述】:
我正在开发一款在线游戏,其中的角色可以针对其他对象和角色执行复杂的动作。我正在构建一个 REST API,并且在尝试遵循一些最基本的标准时遇到了很多麻烦。我知道 REST 并不总是答案,但出于各种原因,使用 REST 对我来说是有意义的,因为 API 的其余部分都在适当地使用它。
这里有一些棘手的例子:
GET /characters/bob/items 这将返回 Bob 携带的一组物品。
我需要对这些项目执行各种“操作”,而我很难将其建模为“资源”。
以下是一些潜在的操作,具体取决于项目的性质: 扔,吃,丢,抱
这很复杂,因为这些“操作”只适用于某些项目。例如,你不能吃剑。此外,“吃”本质上具有“删除”资源的副作用。使用“throw”也可以“删除”资源。使用“drop”可以将资源“转换”为另一种资源类型。 “投掷”要求我提供“位置”。 'Hold' 要求我提供哪只手来握住物品。那么如何将这些操作建模为资源呢?它们都不是“相似的”,因为它们都需要不同的参数并导致完全不同的行为。
目前,我有一个“操作”资源,可以将这些任意操作发布到。但这感觉太 RPC 和非标准化/可发现:
POST /actions/throw { 字符ID:5, 项目ID:10, ×:100, 是:150 }
【问题讨论】:
标签: json api rest architecture hateoas