Я пытаюсь принять решение о наилучшем формате ответа для моего API. Мне нужно вернуть отчет, в котором содержится информация о самом отчете и о полях, содержащихся в нем. Поля могут быть разных типов, поэтому могут быть: SelectList; TextArea; Расположение и т.д ..Какой лучший дизайн для этого ответа API
Каждый из них используют различные свойства, поэтому «SelectList» может использовать «Value», чтобы сохранить его строковое значение и «Location» может использовать «ChildItems» держать «Долгота» «Локатор» и т.д.
Вот что я имею в виду:
"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": "",
}
]
}
]
}
Так что это один список отчетов, который содержит список полей, которые на нем содержится список FieldType для каждого типа поля у меня есть (15 или что-то в этом роде). Это противоречит простому списку отчетов, в котором есть список полей с перечислением «fieldtype», которое, как я думаю, довольно легко манипулировать.
Так Вопрос: Какой формат лучше всего подходит для ответа? Любые альтернативы и комментарии оценены.
EDIT:
Чтобы запросить все поля по 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;
}
}
Я думаю, что правильный ответ i первый. С помощью оператора switch. Это упрощает запрос на такие вещи, как: Получите значение поля с идентификатором этого guid. Это просто означает, что это можно сделать с помощью большого оператора switch.