【发布时间】:2009-08-18 00:54:03
【问题描述】:
我正在开发一个 REST API,但我有一个关于资源表示的问题。
假设我在 /app/person/{id} URI 下有“人”资源。我需要一个 XML 表示,基本上就是所有对象字段作为根下的 XML 节点。现在,需求表明我们还必须支持另一种由专有模式强制执行的 XML 表示。
我的问题:是否符合 REST 最佳实践来支持同一资源的专有内容类型,如 text/my-type?请注意,两者都是 XML,但格式不同,最重要的是它们不携带相同的信息(例如,一种表示可能包含其他字段,如 modified-since)。
重要! - 我知道务实和保持简单比指南和“最佳实践”更重要,但我只是想知道这是否是 RESTful 架构下的方式。
【问题讨论】:
-
如果您在 API 中指定 URI 命名方案(如 /app/person/{id}),那么您的 API 是 RPC,而不是 REST。
-
@pablo 是的,@Wahnfrieden 确实知道 REST 是什么。问题是许多人试图通过定义一组端点来定义 REST API,就像他们定义 RPC API 一样。 REST API 不能以这种方式工作。 REST API 设计应侧重于媒体类型的定义。端点是什么与客户端和 API 的 RESTful 完全无关。但是,服务器实现确实关心 URL,因此很难让人们在设计时忽略它们。
-
@Wahnfrieden。我明白你的观点,它有一些优点。不过,我还是不同意。 [我现在要使用一个便宜的技巧并参考更高的权威] Roy Fielding 说:“REST 不要求 URI 是不透明的。在我的论文中出现不透明这个词的唯一地方是我抱怨cookie 的不透明性。事实上,RESTful 应用程序在任何时候都被鼓励使用具有人类意义的分层标识符,以便最大限度地意外使用信息,超出原始应用程序的预期。”
-
@Pablo 正确。客户端不应该知道 url 结构。作为一个练习,下次你想构建一个 REST 接口时,像做 TDD 一样做。首先创建客户端并为服务器使用存根。让客户端从检索到的表示中获取 URL。您会很快看到客户端并不关心 url 的样子。现在去使用最简单的 url 结构来实现真正的服务器。客户端代码不应更改。
-
@Pablo 我希望有一些实现 REST 客户端的好例子可以指点您。也许有一天我会抽空尝试写一篇。在那之前,想想网络浏览器是如何让你在一个它一无所知的网站上做这么多事情的。
标签: rest