对所有这些REST内容都很陌生。
我正在设计我的API,并且不确定我应该从搜索查询中返回什么。我假设我只会返回与查询完全匹配的所有对象,但在阅读了一些关于HATEOAS之后我想我应该返回一个URI列表呢?
我可以看到这可以帮助缓存项目,但我担心后续的多个HTTP请求会产生很多开销来获取实际的对象信息。
我误会了吗?是否可以返回对象实例或URI?
答案 0 :(得分:3)
我会返回一个资源列表,其中包含有关这些资源的更多详细信息的链接。
来自RESTFull Web Services Cookbook 2010 - Subbu Allamaraju
将查询的响应设计为集合的表示 资源。设置适当的到期缓存标头。如果查询 与任何资源都不匹配,返回空集合。
答案 1 :(得分:2)
恕我直言,重要的是要始终记住“纯粹的REST”和“真实世界的REST”是两种完全不同的野兽。
您是如何从查询中返回URI列表的?如果你返回,例如application/json
,这当然不会告诉客户 应该如何解释内容;因此,与HATEOAS相冲突的是,带外信息(客户端神奇地已经知道在哪里查找所需的数据)已经推动了交互。
所以,回答你的问题:我发现返回对象实例而不是URI是完全可以接受的 - 但要小心,因为在一般情况下这意味着你在不知道客户端是否会使用的情况下生成所有这些数据它。这就是为什么你会经常看到一种混合方法:对象实例不是完整的对象(即服务器所拥有的信息的一部分未被返回),但它们确实包含一个唯一的标识符,允许客户端获取完整的表示形式选择的对象如果选择这样做。