【发布时间】:2015-08-13 19:23:26
【问题描述】:
我有一个 REST api 可以处理大量资源,即客户。客户有时想要客户的缩写/摘要表示。指定请求是摘要表示的好方法是什么?
要获得客户 123 的完整代表,请访问:/customers/123
获取摘要表示是/customers/123/summary 的好方法吗?
有更好的选择吗?
【问题讨论】:
标签: rest
我有一个 REST api 可以处理大量资源,即客户。客户有时想要客户的缩写/摘要表示。指定请求是摘要表示的好方法是什么?
要获得客户 123 的完整代表,请访问:/customers/123
获取摘要表示是/customers/123/summary 的好方法吗?
有更好的选择吗?
【问题讨论】:
标签: rest
为了使您的解决方案可重用和灵活,我建议实施“过滤器”查询参数。在那里,您可以放置客户端所需的任何字段:
GET /customers/123?fields=id,first_name,last_name,email
这样,如果以后您需要为不同的任务创建不同的摘要,您将无需修改任何内容。
我不推荐/customers/123/summary,因为它不灵活。对于一种情况可能没问题,但如果客户端需要为不同的情况访问不同的属性,您将不得不调整资源(很可能通过返回比需要更多的字段)。如果您想“隐藏”字段名称,也许替代方法可能是这样的:
GET /customers/123?view=DESCRIPTION
其中“DESCRIPTION”将描述摘要的类型。例如:
GET /customers/123?view=addresses_only // eg. returns billing and home address
GET /customers/123?view=short // eg. returns only id, first name, last name
这仍然很灵活,因为您可以轻松创建新视图。
【讨论】:
?fields=... 增加的灵活性不是免费的。您正在扩展表面或 API,现在您需要验证(白名单)您公开的字段,您正在为客户端提供更多控制权,这有利有弊。
GET /customers/123?view=short 和/GET /customers/123/short 之间没有什么区别。两者都意味着获取数据的简短版本和要返回的字段可能会在任何一种方法中发生变化。我正在尝试为view 方法找到一个卖点。