(POST) rest API 的请求体中的 Array vs hashmap
Array vs hashmap in the request body of a (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"
}
}
有人可以帮助我了解哪种方法可能是构建此请求正文的更好方法吗?
P.S。 FieldIds 是在后端预定义的。
通常,在设计问题中,没有单一的正确答案,一个解决方案可能对一个问题有利,也可能对另一个问题不利。
我更喜欢创建对象数组的方法(我们将我们的 class 称为 FieldData
)。在上面的例子中,FieldData
class 是:
public class FieldData{
String fieldId;
String fieldValue;
}
我看到的这种方法的好处:
- 响应非常灵活,以后我们可以在不破坏API约定的情况下轻松地在
FieldData
对象中增加一个字段。
- 发送的响应更容易让客户端理解,客户端会知道
fieldId
包含字段的id,fieldValue
包含它的值。而在地图的情况下,此逻辑并未明确可用。
同样在您的情况下,如果在场景 1 中,field1 值以某种方式为 2 个或更多 null,那么它可能会覆盖其他值。
也适用于您具有相同键但具有不同值的场景。这可能会产生不必要的错误。
OOPS 建议数据封装,因此在 JAVA 中创建一个 class 来单独处理请求是一种很好的做法,并且可以更好地测试。
正如@Deepak 已经指出的那样,也是可扩展的。
我正在构建一个涉及前端(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"
}
}
有人可以帮助我了解哪种方法可能是构建此请求正文的更好方法吗?
P.S。 FieldIds 是在后端预定义的。
通常,在设计问题中,没有单一的正确答案,一个解决方案可能对一个问题有利,也可能对另一个问题不利。
我更喜欢创建对象数组的方法(我们将我们的 class 称为 FieldData
)。在上面的例子中,FieldData
class 是:
public class FieldData{
String fieldId;
String fieldValue;
}
我看到的这种方法的好处:
- 响应非常灵活,以后我们可以在不破坏API约定的情况下轻松地在
FieldData
对象中增加一个字段。 - 发送的响应更容易让客户端理解,客户端会知道
fieldId
包含字段的id,fieldValue
包含它的值。而在地图的情况下,此逻辑并未明确可用。
同样在您的情况下,如果在场景 1 中,field1 值以某种方式为 2 个或更多 null,那么它可能会覆盖其他值。 也适用于您具有相同键但具有不同值的场景。这可能会产生不必要的错误。 OOPS 建议数据封装,因此在 JAVA 中创建一个 class 来单独处理请求是一种很好的做法,并且可以更好地测试。 正如@Deepak 已经指出的那样,也是可扩展的。