我有一个Price
对象,它包含一个唯一的Item Id
,Mrp
,Discount
,Seller 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,它就可以成为一个合理的约定,我认为如果其他开发人员看到它,他们不会感到惊讶。
把单子变成地图真的不是很难。
除非你在一个非常不寻常的环境中工作,否则我不会担心额外的数据会被发送到网上。