【问题标题】:What is the best practice in REST-Api, to pass structured data or key-value pair?REST-Api 中传递结构化数据或键值对的最佳实践是什么?
【发布时间】:2020-08-01 17:00:57
【问题描述】:

我有一个类似于下面给出的数据结构,我应该处理它。我正在设计一个 API,它应该接受类似于下面给出的 POST 请求。 (忽略标题等)
{ "Name" : "Johny English", "Id": "534dsf", "Message":[ { "Header":"Country of origin", "Value":"England" }, { "Header":"Nature of work", "Value":"Secret Agent/Spy" } ] }

有些我不觉得,这是传递/接受数据的正确方法。在这里,我谈论的是结构化数据与键值对。虽然我可以将字段(“Name”、“Id”)直接提取到对象属性,但对于键值对,我需要遍历集合并与字符串(例如“工作性质”)进行比较以提取价值观。
我搜索了几个站点,寻找任何最佳实践,无法得出任何结论。是否有任何最佳实践、建议等。

【问题讨论】:

  • 这是关于如何构建 JSON 数据的开发人员方法。根据对象及其价值来构造数据总是更好的。这种方法将更容易执行不同的操作,同时也很容易检索数据。仅在确实需要保留时才将对象保留在 Array 中。
  • 我同意@Bibek。根据对象构造数据总是更好,因为很容易将发布的值反序列化到对象中。否则,您将不得不编写自定义逻辑来反序列化键值对中的数据。
  • 奇怪,没有关于这个话题的具体讨论。因为我觉得这两种方法都同样被接受。

标签: json rest data-structures api-design


【解决方案1】:

我认为您不会找到任何坚定的、基于证据的论据来反对在您的消息架构中包含键值对列表。但这正是需要寻找的东西——人们撰写有关消息架构设计以及如何设计消息以支持更改等方面的文章。

实际上并没有太大的区别

{
    "Name" : "Johny English",
    "Id": "534dsf",
    "Message":[
        {
            "Header":"Country of origin",
            "Value":"England"
        },
        {
            "Header":"Nature of work",
            "Value":"Secret Agent/Spy"
        }
    ]
}

{
    "Name" : "Johny English",
    "Id": "534dsf",
    "Message": {
        "Country of origin": "England",
        "Nature of work": "Secret Agent/Spy"
    }
}

在万维网的早期,“一切”都是键值对,因为很容易描述键值对的集合,这样一个通用组件(如 Web 浏览器)可以使用它(即 HTML 表单的定义)。它完成了工作。

【讨论】:

    【解决方案2】:

    通常最好将响应数据的结构与您期望的相应 POST、PUT 和 PATCH 端点的输入相同。这允许记录更改不需要消费实体首先转换数据。因此,在这种情况下,具有“名称”/“值”字段的对象数组更容易编写输入验证。

    【讨论】:

      猜你喜欢
      • 2018-07-17
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 2016-07-23
      • 2013-01-07
      • 2019-10-21
      • 2019-11-15
      相关资源
      最近更新 更多