REST API 客户端指定响应详细信息的好方法?

Good method for a REST API client to specify the desired amount of detail of the response?

我正在设计一个 REST API,多个客户端将使用它来查询数据存储库。我预计这些客户对 amount/level 响应细节会有不同的需求。

假设我可以查询 collection 本书。一本书可能有很多属性(比任何一个客户可能感兴趣的都多),甚至可能有子资源,并且客户可能会请求大量的书,导致响应 body 比需要的更大。

因此我正在研究优化响应大小的方法。这个想法是为 API 客户端提供一些方法来指定响应中应包含多少详细信息。

我很想知道这个问题以前是如何解决的;哪个机制在实践中运作良好,哪个没有,哪个API设计特别RESTful,哪个不是,等等。

我可以想到客户如何为响应指定所需详细程度的几种方法:

可能有更多的策略来选择所需的详细程度。我有兴趣了解什么在实践中行之有效,又不会严重损害 RESTfulness。

我认为这主要取决于您想为 API 客户提供多少灵活性。

如果您知道数据的不同用途,您可能想要定义一些您的 API 可以 return 的可用格式。

例如,使用这个结构:

 GET /books (with a default format if nothing is specified)
 GET /books/minimal 
 GET /books/full 
 GET /books/otherformat

请注意,如果您不想复制端点,也可以使用此 URL 结构:

GET /books?format=minimal

但是,无论哪种情况,这都会迫使您准确了解客户在任何给定时间需要或想要的数据。

我不会依赖媒体类型,因为与使用 REST 的其他更标准的方式相比,这可能会让用户更加困惑 APIs。

[编辑]

此外,如果您决定将整个 fiends 列表指定给 return 并发现 GET 请求不够,您可以参考此 post 以使用 POST 请求