对于这个 API 响应,哪个设计更好
Which is the better design for this API response
我正在尝试为我的 API 确定最佳的回复格式。我需要 return 一个报告响应,它提供有关报告本身及其包含的字段的信息。字段可以是不同的类型,因此可以有: SelectList;文本区域;位置等..
它们各自使用不同的属性,因此 "SelectList" 可能会使用 "Value" 来存储其字符串值,而 "Location" 可能会使用 "ChildItems" 来保存 "Longitude" "Latitude"等
我的意思是:
"ReportList": [
{
"Fields": [
{
"Id": {},
"Label": "",
"Value": "",
"FieldType": "",
"FieldBankFieldId": {},
"ChildItems": [
{
"Item": "",
"Value": ""
}
]
}
]
}
这个问题是我希望用户知道什么时候值应该为空。所以我期待一个想要从 "Location" 中提取值的人从 "ChildItems" 而不是 "Value" 中提取它。然而,这样做的好处是查询事物比以下替代方案更容易:
"ReportList": [
{
"Fields": [
{
"SelectList": [
{
"Id": {},
"Label": "",
"Value": "",
}
]
"Location": [
{
"Id": {},
"Label": "",
"Latitude": "",
"Longitude": "",
"etc": "",
}
]
}
]
}
所以这是一个报告列表,其中包含一个字段列表,其中包含我拥有的每个字段类型(15 个或类似字段)的字段类型列表。这与仅拥有一个报告列表相反,该列表包含一个带有 "fieldtype" 枚举的字段列表,我认为这很容易操作。
所以问题:哪种格式最适合回复?任何替代方案和评论表示赞赏。
编辑:
要按字段类型查询报表中的所有字段并使用第一种方式获取值,它会像这样:
foreach(field in fields)
{
switch(field.fieldType){
case FieldType.Location :
var locationValue = field.childitems;
break;
case FieldType.SelectList:
var valueselectlist = field.Value;
break;
}
第二个是这样的:
foreach(field in fields)
{
foreach(location in field.Locations)
{
var latitude = location.Latitude;
}
foreach(selectList in field.SelectLists)
{
var value= selectList.Value;
}
}
我认为正确答案是第一个。用 switch 语句。它可以更轻松地查询以下内容:使用此 guid 的 id 获取字段的值。它只是意味着通过一个大的 switch 语句。
我选择了第一个,因为它更容易查询最常见的用例。如果他们想要更改它,我希望客户端代码将其放入他们自己的架构中。
我正在尝试为我的 API 确定最佳的回复格式。我需要 return 一个报告响应,它提供有关报告本身及其包含的字段的信息。字段可以是不同的类型,因此可以有: SelectList;文本区域;位置等..
它们各自使用不同的属性,因此 "SelectList" 可能会使用 "Value" 来存储其字符串值,而 "Location" 可能会使用 "ChildItems" 来保存 "Longitude" "Latitude"等
我的意思是:
"ReportList": [
{
"Fields": [
{
"Id": {},
"Label": "",
"Value": "",
"FieldType": "",
"FieldBankFieldId": {},
"ChildItems": [
{
"Item": "",
"Value": ""
}
]
}
]
}
这个问题是我希望用户知道什么时候值应该为空。所以我期待一个想要从 "Location" 中提取值的人从 "ChildItems" 而不是 "Value" 中提取它。然而,这样做的好处是查询事物比以下替代方案更容易:
"ReportList": [
{
"Fields": [
{
"SelectList": [
{
"Id": {},
"Label": "",
"Value": "",
}
]
"Location": [
{
"Id": {},
"Label": "",
"Latitude": "",
"Longitude": "",
"etc": "",
}
]
}
]
}
所以这是一个报告列表,其中包含一个字段列表,其中包含我拥有的每个字段类型(15 个或类似字段)的字段类型列表。这与仅拥有一个报告列表相反,该列表包含一个带有 "fieldtype" 枚举的字段列表,我认为这很容易操作。
所以问题:哪种格式最适合回复?任何替代方案和评论表示赞赏。
编辑:
要按字段类型查询报表中的所有字段并使用第一种方式获取值,它会像这样:
foreach(field in fields)
{
switch(field.fieldType){
case FieldType.Location :
var locationValue = field.childitems;
break;
case FieldType.SelectList:
var valueselectlist = field.Value;
break;
}
第二个是这样的:
foreach(field in fields)
{
foreach(location in field.Locations)
{
var latitude = location.Latitude;
}
foreach(selectList in field.SelectLists)
{
var value= selectList.Value;
}
}
我认为正确答案是第一个。用 switch 语句。它可以更轻松地查询以下内容:使用此 guid 的 id 获取字段的值。它只是意味着通过一个大的 switch 语句。
我选择了第一个,因为它更容易查询最常见的用例。如果他们想要更改它,我希望客户端代码将其放入他们自己的架构中。