REST API:使用内容类型与自定义参数或终结点



我正在为一个资源设计一个列表端点,该端点同时具有名为/transactions的资源的完整版本和轻版本。默认情况下,响应将包括完整的资源,但也需要向客户端提供资源列表的"简化"版本。

第一个选项是使用自定义参数(例如/transactions?summary=true)第二种选择是使用自定义端点,尽管不是很RESTful(例如/transactions/summary)

第三种选择是使用内容类型来允许客户端声明替代响应正文格式。这看起来怎么样?(application/json+摘要)?有这样做的好例子吗?

还有其他选择吗?

使用Accept/Content Type标头的第三个选项允许媒体类型作为数据的表示,与数据本身分离。

github的API就是一个很好的例子:https://developer.github.com/v3/media/

它使用http标头允许客户端选择数据的格式以及版本。因此,在您的情况下,请求可能看起来像:

curl http://api.host.com/transactions -H "Accept: application/summary+json"

响应将包含简化数据格式的主体和设置为application/summary+json 的Content-Type标头

如果你想对此更加迂腐,你也可以使用供应商媒体类型application/vnd.yourcompany.summary+json。在这种情况下,vnd意味着媒体类型是通常与特定于应用程序的媒体类型相关联的供应商。

更多信息:

  • 集合+JSON
  • 类似的答案
  • API设计的宁静

最新更新