具有多个视图的REST资源

具有多个视图的REST资源,rest,Rest,我们正试图为REST服务遵循一个非常严格的习惯用法,但是我们遇到了这样一种情况,即我们有两个客户机,它们需要相同资源的不同表示。一个是前端,他们希望使用非常少的资源,只包含所需的字段,并采用更扁平的结构(为了提高性能),另一个则要求数据存储中的所有字段采用高度嵌套的结构。REST服务处理此问题的惯用方法是什么?给定规范URL应该与它们访问相同资源的URL相同。我们曾想过向请求中添加投影,但这样结构仍然会非常嵌套,这会导致JS客户端出现性能问题,因为它必须遍历结构并将其展平,当返回的资源数量很大时

我们正试图为REST服务遵循一个非常严格的习惯用法,但是我们遇到了这样一种情况,即我们有两个客户机,它们需要相同资源的不同表示。一个是前端,他们希望使用非常少的资源,只包含所需的字段,并采用更扁平的结构(为了提高性能),另一个则要求数据存储中的所有字段采用高度嵌套的结构。REST服务处理此问题的惯用方法是什么?给定规范URL应该与它们访问相同资源的URL相同。我们曾想过向请求中添加投影,但这样结构仍然会非常嵌套,这会导致JS客户端出现性能问题,因为它必须遍历结构并将其展平,当返回的资源数量很大时,可能会非常昂贵。

我建议有两种选择:

1) 如果查询字段可以更改,则可以指定要作为查询参数的字段(结构)。这在RESTAPI中很常见。如果没有规范,您将返回字段的默认列表。默认值与否取决于服务,但一般来说,最小值集会为性能提供更好的默认值。为了避免列出所有字段,可以使用类似于
fields=all
的内容。在您的情况下,
结构
可能更有意义

2) 您可以在自定义请求头中对字段请求进行编码。有些人认为这是一种更为静态的方法,因为您只是修改响应的格式,而不是调用的底层操作,因此URL应该是相同的

实际上,大多数服务更喜欢第一种方法,因为它被认为更容易接近

就我个人而言,我认为这是一个边际选择。我更喜欢在
Accept
标题中对返回媒体(JSON、HTML、XML等)进行编码。任何一个优秀的开发人员都有可以轻松设置标题的工具,但以我的经验来看,
字段
查询参数习惯用法要流行得多,而且对于惯例有很多话要说


注意,如果您使用headers方法,您可能不应该为结构/字段规范使用
Accept
标题。如果你走那条路线,就添加你自己的标题。

酷,我没有想到标题。