maa*_*aaz 7 javascript api rest backend node.js
假设我有一个 API 可以返回用户钱包余额和即将到期的钱包交易列表
response = {
user_balance: 20
expiring_credits : [
{object 1 }
{object 2}
]
}
Run Code Online (Sandbox Code Playgroud)
如果用户没有任何即将到期的交易,我们可以通过 2 种方式格式化 respose 选项 1
response = {
user_balance: 20
}
Run Code Online (Sandbox Code Playgroud)
选项 2
response = {
user_balance: 20
expiring_credits : []
}
Run Code Online (Sandbox Code Playgroud)
哪个是理想的选择或最佳实践?为什么?寻找一些专家见解。非常感谢。
您返回的数据应反映所要求的数据的形状。如果他们要求提供用户信息,其中包括一对一的用户余额和一对多的到期信用,您应该包括这些关系。如果没有要包含的内容,如果是一对一的,则特别用 null 调用它,让开发人员知道“这里缺少数据”,如果是一对多,则返回一个空数组,如没有从属记录,但有一个主记录。
一个示例端点:
/user/[id]/credits
GET
id: the user's id
{
user_balance: null | number, // o:o
expiring_credits: credits[] // o:m
}
Run Code Online (Sandbox Code Playgroud)
这样,消费开发人员的数据形状总是相同的,他们不必担心返回的对象上不存在顶级键。它会一直存在,并且会始终与返回的类型保持一致。
如果它存在,它将是这种类型。如果它是一个数组,它将始终是一个数组。这让人们编码到数据形状,而不是数据形状的可能性。
小智 7
保持 json 响应结构完整始终是一个好习惯,这样客户端就不需要了解属性是否为空,因为属性本身由于某些授权而错过了我们,或者是因为没有数据存在
如果存在属性但不存在数据数组,则调用用户删除属性本身会更加清晰。
我想不出有什么好的理由仅仅因为它是空的而省略一个字段。您可能能够在响应中保存几个字节,但这是一个非常弱的论点。
另一方面:遗漏不等于缺席。API 可以返回部分响应:
部分响应允许您仅向应用程序开发人员提供他们需要的信息。
部分响应:
api.example.com/user/1234
默认返回所有字段:
response = {
user_balance: 20,
expiring_credits : [
{object 1 },
{object 2}
]
}
Run Code Online (Sandbox Code Playgroud)
api.example.com/user/1234?fields=user_balance
仅发送user_balance
,expiring credits
即使存在过期信用也省略:
response = {
user_balance: 20
}
Run Code Online (Sandbox Code Playgroud)
更好的做法是发送一个空数组。原因是当有人调用您的 API 并期望expiring_credits
响应中出现字段时,如果您没有发送它是因为它是空的,他们可以假设他们发送了一个错误的请求,因为空数组是一个有效值。
注意:我在这里所说的一切都是基于我自己在 Web 应用程序和 api 开发方面的经验。
根据我的经验,始终向前端或其他所有 api 或 Web 应用程序或任何其他地方发送静态结构总比根本不发送它们要好。
我的意思是,如果您正在处理一个项目并且必须将您的数据发送到下一个实施部门,您必须有一个标准来响应您的响应,这意味着您承诺例如您从/me/
url发送一些带有 200 个响应代码的数据,你肯定要保证你总是发送["username", "email"]
字段。(即使它们是 null 或空字符串)这使得其他部门(可以是任何东西)始终信任来自您的 api 的响应。
response = {
user_balance: 20
expiring_credits : []
}
Run Code Online (Sandbox Code Playgroud)
所以这样更好。
归档时间: |
|
查看次数: |
793 次 |
最近记录: |