【发布时间】:2019-07-19 13:58:12
【问题描述】:
我正在开发一种将数据返回给最终用户的 API。在我的服务器端模型中,我使用了许多具有关联查找表的代码来查找与代码相关的描述和其他相关属性。
我很好奇是否有关于返回数据的“最佳实践”。这里的选项是:
选项 1:返回代码并为查找列表提供 API
在这种情况下,您可能会遇到这样的情况:
//An API call to get a person
let person = await this.dataService.getPerson(1); //performs fetch
//{id: 1, first: "Micky", last: "Mouse", gender: 1, countryOfOrigin: "US"}
//An API call to get lookups -- returned as Map();
let genders = await this.dataService.getGenders();
let countries = await this.dataService.getCountries();
//Now I can do the following to get the definition
let gender = genders.get(person.gender);
let country = countries.get(person.countryOfOrigin).description;
console.log("gender.description");
console.log("country.description");
console.log("country.isoA3");
选项 2:返回完全填充的对象
//API call to get a person
let person = dataService.getPerson(1);
//{id: 1,
first: "Micky",
last: "Mouse",
gender: "Male",
countryOfOrigin: {
code: "US",
description: "United States of America",
isoA3: "USA",
isoN3: 840
}
}
选项 3:使其自引用
我知道有一个选项,countryOfOrigin 可能是指向给定国家/地区的另一个 API 调用的链接。然而,在我的情况下,大多数用户会请求大量的人而不是个人,并以列表形式显示这些人——所以如果用户必须查询 1000 人,这对服务器来说将是一个很大的打击然后 ping 服务器 1000 次以获取每个 countryOfOrigin。
是否有标准或最佳实践可以提供一些指导?
【问题讨论】:
-
一切都取决于数据更改的速率,因为您可以只调用一次性别和国家/地区并将结果存储在客户端中以供以后重复使用,但如果安全性受到威胁,您应该使用第二个选项。第三个似乎是最能负担有效载荷的。
-
我会为调用者做一个选项。有选项 1 的默认值,但允许他们使用 URL 参数告诉您他们想要选项 2。并且保持一致:选项 2 具有 countryOfOrigin 的代码和值,但性别只有值,这是不一致的。作为一项规则,如果您不确定哪种方式,请同时使用这两种方式并让客户选择。
标签: javascript rest api