我们正在努力遵循一个非常严格的习惯用于我们的REST服务,但是我们遇到了这样一种情况:我们有两个客户需要不同的同一资源表示。一个是前端,他们更喜欢一个非常小的资源,只有他们需要的字段和更扁平的结构(为了性能),另一个需要我们在数据存储中的所有字段都是一个重度嵌套的结构。 REST服务处理此问题的惯用方法是什么,因为规范URL应该与访问相同资源的URL相同。我们考虑在请求中添加投影,但是这样结构仍然会完全嵌套,导致JS客户端出现性能问题,因为它必须遍历结构并将其展平,这在资源数量上可能非常昂贵。回来很高。
答案 0 :(得分:5)
我建议有两种选择:
1)如果查询字段可能不同,您可以指定所需的字段(结构)作为查询参数。这在REST API中很常见。如果没有规范,您将返回默认的字段列表。什么应该是默认值取决于服务,但通常最小集合是一个更好的性能默认值。为了避免列出所有字段,可以使用fields=all
之类的内容。在您的情况下,structure
可能更有意义。
2)您可以在自定义请求标头中对字段请求进行编码。有些人会认为这是更多REST-ful方法,因为您只修改响应的格式而不是调用的基础操作,因此URL应该是相同的。
在实践中,大多数服务更喜欢第一种方法,因为它被认为更平易近人。
就个人而言,我认为这是一个微不足道的选择。我更喜欢在Accept
标题中对返回媒体(JSON,HTML,XML等)进行编码。任何体面的开发人员都有工具可以很容易地设置标题,但根据我的经验,fields
查询参数习语更为普遍,并且对于惯例来说有很多话要说。
注意,如果使用头方法,则可能不应将Accept
头用于结构/字段规范。如果你走这条路,你可以添加自己的标题。