我有一个Price对象,它包含一个唯一的Item IdMrpDiscountSeller Price
公开了一个http api,它给出一个返回其数据的项目id列表。现在有两种方法。
例如:如果有人做了一个get onA,B,C,则响应:
方法1:返回价格对象列表:

[
    { "ItemId" : "A",
      "Mrp" : 55.0,
      "Discount" : 0.0,
      "Seller Price" : 55.0
    },
    { "ItemId" : "B",
      "Mrp" : 100.0,
      "Discount" : 10.0,
      "Seller Price" : 90.0
    },
    { "ItemId" : "C",
      "Mrp" : 75.0,
      "Discount" : 0.0,
      "Seller Price" : 75.0
    }
]

方法2:返回price对象的映射:
{
    "A" :{ "ItemId" : "A",
           "Mrp" : 55.0,
           "Discount" : 0.0,
           "Seller Price" : 55.0
         },
    "B" :{ "ItemId" : "B",
           "Mrp" : 100.0,
           "Discount" : 10.0,
           "Seller Price" : 90.0
         },
    "C" :{ "ItemId" : "C",
           "Mrp" : 75.0,
           "Discount" : 0.0,
           "Seller Price" : 75.0
         }
}

方法2优于1的优点是它给客户端提供了迭代和查找的灵活性,但也有额外的数据在布线上流动的折衷。现在我不想从实体内部移出item id,因为没有它,实体就失去了它的意义,另外,客户机必须插入item id来完成对象,然后将其传递给其他一些客户机。
这方面的最佳做法是什么?任何其他的方法。
由于api正处于设计阶段,所以可以容纳任何东西。
谢谢

最佳答案

我不会做第二个选择,除非有一个明确的用例,客户机几乎总是想立即使用一个映射,而我的数据已经是一个映射的形式。
对于一个内部api,只要您访问的是consistent,它就可以成为一个合理的约定,我认为如果其他开发人员看到它,他们不会感到惊讶。
把单子变成地图真的不是很难。
除非你在一个非常不寻常的环境中工作,否则我不会担心额外的数据会被发送到网上。

09-30 17:03
查看更多