【发布时间】:2012-03-17 00:24:19
【问题描述】:
我正在为 RESTful API 设计自定义媒体类型,并研究了一些“标准”链接关系的类型和语义,以便为我的设计提供一些指导。
为了演示这个问题,假设我有一个资源,我可以对其执行标准的读取、更改、删除方法,并且我分别使用 GET、PUT 和 DELETE 的 HTTP 习惯用法来实现这些方法。
我可以合理地(重新)使用RFC5023 中定义的“编辑”链接关系(来自IANA link registry),其中指出:
"..."edit"的值指定href属性的值 是可编辑成员条目的 IRI。当出现在一个 atom:entry,href IRI 可用于检索、更新和删除 该条目所代表的资源......”
通过这种方式,用户代理可以理解具有“编辑”关系的链接将允许对资源进行 GET、PUT 和 DELETEd。
然而,问题就在这里,如果资源状态被编辑,使得资源现在只支持 GET 和 DELETE 操作,“编辑”关系就不再精确。
为了保持精度,我需要 i) 选项 A:指定另一个仅支持 GET & DELETE 的(复合)链接关系,或 ii) 选项 B:为每个可能的状态转移指定单独的链接并使用适当的表示允许的状态转移。后一种方法提供了精确性,但似乎过于冗长。
或者,(选项 C)我可以保留“编辑”关系并接受缺乏精度,即链接将传达 GET、PUT、DELETE 语义,但尝试 PUT 的用户代理会遇到HTTP 错误“405 - 方法不允许”。但是,我对这种方法也不满意,因为它向客户端暗示了不受支持的状态转换。
总之,问题是平衡链接关系通用性和精度的最明智的方法是什么?
【问题讨论】:
-
交叉发布到 API Craft link
标签: api rest hateoas hypermedia