json - 如果包含不同的结构,如何构建 REST API?
问题描述
目前,我有一个 API 端点需要以 JSON 格式返回项目列表。但是,返回的每个项目都有不同的结构。
例如,想想一个提要 API。但是,API 中每个项目的结构可能非常不同。
返回包含多个项目的 API 响应是否标准 - 每个项目都有不同的结构?
下面是一个组成的样本,以显示不同的结构。
示例中的商店、糖果和人员在我的案例中逻辑上是相同的(3 个不同的项目)。然而,底层的结构可能非常不同——具有不同的键值对、不同级别的嵌套等。
{
"store":{
"book":[
{
"category":"reference",
"author":"Nigel Rees",
"title":"Sayings of the Century",
"price":8.95
},
{
"category":"fiction",
"author":"Evelyn Waugh",
"title":"Sword of Honour",
"price":12.99
}
],
"bicycle":{
"color":"red",
"price":19.95
}
},
{
"candy":
{
"type":"chocolate",
"manufacturer":"Hershey's",
"cost":10.00,
"reduced_cost": 9.00
},
},
{
"Personnel":
{
"name":"chocolate",
profile:
{
"Key": "Value",
"Key": "Value",
something:
{
"Key": "Value",
"Key": "Value",
}
}
},
},
}
解决方案
就如何设计有效负载而言,REST 没有严格的规则。但是,在这样做时,显然还有一些事情需要考虑。在不真正了解您的需求细节的情况下,很难给出具体的建议,但总的来说,在设计 JSON REST API 时,这就是我的想法。
- 平均而言,我的有效载荷有多大。我们不想在每个请求上传递大量数据。这将使您的应用程序非常缓慢,甚至可能无法在移动设备上使用。对我来说,绝对最坏情况下的限制是 1mb,也许这甚至太高了。如果您发现您的有效负载太大,请将其分解为单独的资源。例如,不要将书籍包含在对您的商店资源的响应中,只需引用可以通过 /stores/books/{id} 访问的书籍的唯一 ID
- 是否足够简单以至于偶然发现资源的人可以理解它的一般用途。API 越简单,对用户就越有用。如果结构真的很复杂,也许把它分成几个资源是更好的选择
- 这一点平衡了数字#1。尽量减少获取某条数据的请求数量(仍然考虑上面的其他两点)。将有效负载过度分解为单独的资源也会降低性能。
推荐阅读
- c# - 在 DateTime 类构造函数中添加纳秒值
- javascript - 我正在尝试显示文本,单击时播放音频,当声音结束时出现新文本,单击时播放新音频
- node.js - 如何修复服务器无法在 Angular IDE 的 CLI 服务器选项卡上启动
- python - 在 Tensorflow 对象检测 API 中裁剪图像并显示它
- toad - 如何防止 Oracle Toad 中的意外删除
- javascript - Web3 1.0:`web3.eth.call(tx)` 为合约创建返回什么?
- react-native - React-Navigation 增加向后滑动区域
- type-conversion - U-SQL DataType conversion
- shell - 使用字段验证行号的 AWK 脚本
- json - ionic 3 - 将嵌套 JSON 中的数据提取到数组中