RESTful API设计。当请求带有过滤器时,您是否也应返回该过滤器的值?

时间:2016-11-07 13:08:22

标签: rest api-design

让我们说客户做GET请求/ items / color / {color}

当服务器返回具有所述颜色的对象数组时,每个项目对象是否应具有颜色属性?

客户端知道返回商品的颜色,因为他要求提供颜色,服务器是否应该尝试将响应数量设置得更小或没有?

编辑:人们可以更多地关注节省带宽部分吗?如果最好返回整个资源,答案可以包括为什么最好还原整个资源而不是保存带宽,而不仅仅是为什么要返回整个资源。

3 个答案:

答案 0 :(得分:2)

一般情况下(至少那是我理解的REST的概念),请求的结果应该始终是完整资源。如果该项目包含成员color,则没有理由在结果中压制该成员。这与REST的资源概念相矛盾。资源不会改变其属性。

抑制成员不仅会出现意外情况,甚至可能会在客户真正期待该成员时破坏客户端。

让我们假设客户端具有在没有过滤器的情况下解析REST调用结果的功能。将返回所有字段,客户端将解析所有字段。现在客户端请求完全相同的资源(item),但突然显示字段不同 - 上面的代码解析结果无法重复使用。

此外,当你考虑它时,抑制那个成员可能比仅仅返回它更多的工作。

答案 1 :(得分:1)

没有“正确”的答案,这取决于一般的API设计,应该是您的决定。

我同意Thorstens评论你应该返回整个资源 - 这与一般的REST想法很接近。在执行此操作时,您还可以实现一些选择FB API中的字段的机制:请参阅this paragraph的“选择字段”部分。

答案 2 :(得分:0)

您应该在响应中保留颜色。这有多种原因:

  • 您确保所要求的是您得到的内容
  • 如果页面中有多个不同颜色的项目,则不要让客户端处理"过滤"基于颜色的项目
  • 你有更多"安全"响应。例如,客户端请求蓝色,但是恶意脚本会将此响应作为红色项目进行操作。