【发布时间】:2017-02-21 06:09:01
【问题描述】:
我们有手机电子商务网站。我们正在构建用于 POST、PUT、DELETE、UPDATE 手机的 restful api。
每部手机都将具有以下基本功能:价格、制造商、制造年份、颜色、折扣。
除此之外,大多数手机也会有图像。
另外,其中很少有制造商保修。让我们说其中的 50%。
而且很少有手机会提供融资选项,例如我们已与某些银行合作为这些手机提供贷款。几乎 80% 将拥有此设施。
我们为此决定了两种设计 api 的方法:
方法 1. 所有这些都在同一个 JSON 对象中。只有一个 API,例如:
{
"basicInfo": {
"price": "",
"mfgYear": "",
"manufacturer": ""
...
},
"images":{...},
"warranty":{...},
"finance":{...}
}
方法 2. 将所有这些 JSON 对象分开。例如:
First Api for "basicInfo".
Second Api for "images".
Third Api for "warranty".
Fourth Api for "finance"
我可以弄清楚每种方法的优缺点:
方法1: 优点: 我们在服务器上收集所有库存信息。这意味着更少的 API 命中,更少的服务器负载。此外,将来如果我们实施一些队列处理以将这些股票信息保存到数据库中,则在股票插入数据库之前不会发布图像/保修/财务的情况,因为我们将所有信息放在一起。因此,我们将首先将股票插入数据库,然后将记录插入其他具有外键关系的表中。 缺点:此 API/资源有多种职责。会越来越大,以后这个API的领域可能会太多。在我看来,这也违反了单一责任原则。
方法2: 优点: 这看起来有点干净和有条理。看起来每个 API 都有自己定义的职责。对我来说看起来可扩展。如果对一个 API 进行更改,则不太可能影响其他 API。 缺点:服务器上的 API 点击次数更多。在发布库存之前发布相关库存资源的机会更大。例如,我们可以在插入库存之前将图像出列。
Approach3. 提供两种选择。允许使用基本信息发送其他信息以及为这些资源创建单独的 API 的示例。
哪种方法最好,即更安静、可扩展且性能更好?
【问题讨论】:
标签: rest api asp.net-web-api api-design