让我们说客户做GET请求/ items / color / {color}
当服务器返回具有所述颜色的对象数组时,每个项目对象是否应具有颜色属性?
客户端知道返回商品的颜色,因为他要求提供颜色,服务器是否应该尝试将响应数量设置得更小或没有?
编辑:人们可以更多地关注节省带宽部分吗?如果最好返回整个资源,答案可以包括为什么最好还原整个资源而不是保存带宽,而不仅仅是为什么要返回整个资源。答案 0 :(得分:2)
一般情况下(至少那是我理解的REST的概念),请求的结果应该始终是完整资源。如果该项目包含成员color
,则没有理由在结果中压制该成员。这与REST的资源概念相矛盾。资源不会改变其属性。
抑制成员不仅会出现意外情况,甚至可能会在客户真正期待该成员时破坏客户端。
让我们假设客户端具有在没有过滤器的情况下解析REST调用结果的功能。将返回所有字段,客户端将解析所有字段。现在客户端请求完全相同的资源(item
),但突然显示字段不同 - 上面的代码解析结果无法重复使用。
此外,当你考虑它时,抑制那个成员可能比仅仅返回它更多的工作。
答案 1 :(得分:1)
没有“正确”的答案,这取决于一般的API设计,应该是您的决定。
我同意Thorstens评论你应该返回整个资源 - 这与一般的REST想法很接近。在执行此操作时,您还可以实现一些选择FB API中的字段的机制:请参阅this paragraph的“选择字段”部分。
答案 2 :(得分:0)
您应该在响应中保留颜色。这有多种原因: