这个API响应的设计更好

时间:2015-08-01 13:52:01

标签: performance api rest soap querying

我试图为我的API决定最佳的响应格式。我需要返回一个报告响应,该响应提供有关报告本身及其中包含的字段的信息。字段可以是不同的类型,因此可以有:SelectList;文本区;位置等..

它们各自使用不同的属性,因此" SelectList"可能会使用"价值"存储其字符串值和"位置"可能会使用" ChildItems"持有"经度" "纬度"等

这就是我的意思:

  "ReportList": [
    {
      "Fields": [
        {
          "Id": {},
          "Label": "",
          "Value": "",
          "FieldType": "",
          "FieldBankFieldId": {},
          "ChildItems": [
            {
              "Item": "",
              "Value": ""
            }
          ]
        }
      ]
    }

这个问题是我希望用户知道什么时候该值应为null。因此,我期待一个人希望从"位置"中提取价值。从" ChildItems"中提取它而不是"价值"。然而,对此的好处是查询事物要比下面的替代方案容易得多:

  "ReportList": [
    {
      "Fields": [
        {
          "SelectList": [
            {
               "Id": {},
               "Label": "",
               "Value": "",
            }
          ]
          "Location": [
            {
               "Id": {},
               "Label": "",
               "Latitude": "",
               "Longitude": "",
               "etc": "",
            }
          ]
        }
      ]
    }

所以这个是一个报告列表,其中包含一个字段列表,其中包含我拥有的每种字段类型的字段类型列表(15或类似的东西)。这与仅包含报告列表相反,报告列表包含具有"字段类型"的字段列表。我认为enum很容易操纵。

所以问题:哪种格式最适合回复?任何替代和评论都赞赏。

编辑:

要按报告中的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获取字段的值。它只是意味着通过一个大的转换声明。

1 个答案:

答案 0 :(得分:0)

我选择了第一个,因为查询最常见的用例更容易。我希望客户端代码可以在需要更改时将其置于自己的架构中。