【问题标题】:RESTful search. Return actual resources or URIs?RESTful 搜索。返回实际资源或 URI?
【发布时间】:2012-08-30 19:00:57
【问题描述】:
对于所有这些 REST 内容来说都是全新的。
我正在设计我的 API,但不确定我应该从搜索查询中返回什么。我假设我只会返回与查询完全匹配的所有对象,但在阅读了一些关于 HATEOAS 的信息后,我想我应该返回一个 URI 列表吗?
我可以看到这有助于缓存项目,但我担心后续多个 HTTP 请求会产生大量开销以获取实际对象信息。
我是不是误会了?是否可以返回对象实例或 URI?
【问题讨论】:
标签:
web-services
api
rest
search
hateoas
【解决方案1】:
我会返回一个资源列表,其中包含指向这些资源的更多详细信息的链接。
来自 RESTFull Web Services Cookbook 2010 - Subbu Allamaraju
将查询的响应设计为集合的表示
资源。设置适当的过期缓存标头。如果查询
不匹配任何资源,返回一个空集合。
【解决方案2】:
恕我直言,重要的是要始终记住“纯 REST”和“现实世界 REST”是两种截然不同的野兽。
首先您是如何从查询中返回 URI 列表的?如果您返回,例如application/json,这当然不会告诉客户端如何解释内容;因此,交互已经由与 HATEOAS 冲突的带外信息驱动(客户端神奇地已经知道在哪里寻找它需要的数据)。
所以,回答您的问题:我发现返回对象实例而不是 URI 是完全可以接受的——但要小心,因为在一般情况下,这意味着您在不知道客户端是否会使用的情况下生成所有这些数据它。这就是为什么你会经常看到混合方法的原因:对象实例不是完整的对象(即服务器拥有的部分信息没有返回),但它们确实包含一个唯一标识符,允许客户端获取完整的表示如果它选择这样做,则选择对象。