首页 > 解决方案 > (POST)rest API的请求正文中的数组与哈希图

问题描述

我正在构建一个涉及前端(基于 JavaScript 浏览器的客户端)和后端(基于 Java 的服务)的应用程序。

对于将从浏览器调用到后端服务的 API(POST 方法)之一(在前端填写表单后),我计划按如下方式传递请求正文(JSON)

{
    data: [
        {
            "fieldId": "123sda121231",
            "fieldValue": "some_user_input_for_field_1",
        },
        {
            "fieldId": "223sda121231",
            "fieldValue": "some_user_input_for_field_2",
        },
        {
            "fieldId": "323sda121231",
            "fieldValue": "some_user_input_for_field_3",
        }
    ]
}

但是,现在我很困惑,我想知道我是否应该按照以下方式进行操作。

{
    data: {
        "123sda121231": "some_user_input_for_field_1",
        "223sda121231": "some_user_input_for_field_2",
        "323sda121231": "some_user_input_for_field_3"
    }
}

有人可以帮助我了解构建此请求正文的更好方法吗?

PS FieldIds 是在后端预定义的。

标签: apirestpostapi-design

解决方案


通常,在设计问题中,没有单一的正确答案,一个解决方案可能对一个问题有利,而对另一个问题可能不利。

我更喜欢创建对象数组的方法(让我们将类称为FieldData)。在上面的例子中,FieldData类是:

public class FieldData{
   String fieldId;
   String fieldValue;
}

我看到这种方法的好处:

  1. 响应非常灵活,将来我们可以轻松地在FieldData对象中添加一个字段,而不会破坏 API 契约。
  2. 发送的响应更容易让客户端理解,客户端会知道其中fieldId包含字段的 id 并fieldValue包含其值。而在地图的情况下,此逻辑不是明确可用的。

推荐阅读