2015-08-01 5 views
0

Я пытаюсь принять решение о наилучшем формате ответа для моего 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.

ответ

0

Я пошел с первым, потому что проще всего запросить наиболее распространенный вариант использования. Я ожидаю, что код клиента поместит его в свою схему, если они захотят его изменить.