【问题标题】:Should I return an array instead of individual values? [closed]我应该返回一个数组而不是单个值吗? [关闭]
【发布时间】:2020-07-10 15:20:35
【问题描述】:

我们有一个使用 REST 和 JSON 与 ReactJS 前端交互的 C# WebAPI。我们偶然发现了需要从服务器向客户端发送大量数据的情况。

格式基本上是:

[
    {
        id: 1,
        description: "description for Id 1",
        parentId: 1
    },
    {
        id: 2,
        description: "description for Id 2",
        parentId: 1
    },
    {
        id: 3,
        description: "description for Id 3",
        parentId: 2
    },
   ......
]

我们的前端开发人员正试图说服我改用这样的数组:

[
    [1, 'description for Id 1', 1],
    [2, 'description for Id 2', 1],
    [3, 'description for Id 3', 2],
    ....
]

这当然会使 JSON 更轻量级,但我认为这是一种不必要的 hack,会破坏格式的逻辑和描述性。

我的问题是:

这是一种不好的做法吗?这会破坏服务器和客户端之间的“预期”合同吗?还是正常的优化做法?

P.S.:在写这个问题之前,我怀疑这是否会作为一个“基于主要意见的问题”来结束,但我不认为是这种情况。

【问题讨论】:

  • 这个问题的一部分将根据意见得到答案,这在 Stack Overflow 上并不是那么有建设性。回答你的一个问题,它会破坏合同吗?好吧,这两种 json 格式定义了完全不同的结构,能够处理第一种格式的客户端将无法自动处理第二种格式,反之亦然。
  • 我认为您在两个方面是对的 - 由于基于意见,问题将被关闭,并且展平的数组失去了数据含义的上下文。
  • 至于“正常优化实践”,“正常优化实践”的第一步是先验证你需要优化什么,然后衡量你有什么找出您需要优化的什么。如果没有确凿的证据表明这改善了 something,我永远不会将结构从具有属性的对象更改为扁平的非结构化数组。如果您所拥有的只是前端开发人员的意见,那么对我来说,这不会削减它。
  • 我们过去曾遇到过这类优化问题。我们处理它的最初方法是返回分页响应,并允许前端通过查询参数指定某些分页分页行为(即:每页的帖子数和页码)。我们提供的另一个选项是允许字段过滤以提供前端以仅指示该特定请求所需的必需字段。但我同意上述观点,您可能会对此有很多意见。
  • 好的,谢谢您的见解。我会在几秒钟内删除这个问题,因为它是基于意见的。

标签: c# json rest


【解决方案1】:

请记住,除非您真的弄乱了服务器设置,否则数据会以 gzip 格式发送。比较这两个(小)样本的 gzip 格式,差异约为 20 字节(101 字节与 77 字节)。

而且它只会越来越小,相对而言,你拥有的条目越多,因为公共部分保持不变,它们只需要编码一次。

【讨论】:

  • 感谢您的洞察力。事实上,我们正在压缩响应。在我对 30k 个对象的测试中,差异可以忽略不计,并且无法弥补格式的混乱。
  • 正是 JSON 被如此广泛使用的原因,关键名称被如此频繁地重用,以至于 gzip 使它们基本上免费!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 2020-08-22
  • 2019-09-03
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多