如何设计REST API来导出客户端所需的数据,以便将其显示为单个报告



本质上,客户端需要显示特定user的此Report视图。目前,当客户端登录此页面时,他们必须拨打多个网络电话(50-100)才能获得在报告中显示所需的数据。

作为一种解决方案,我希望设计一个单一的REST API端点,该端点依赖于负责查询多个表和复杂联接的单一Query对象来发送JSON对象作为响应,这样客户端就不必进行多次网络调用。

关于如何设计此工作流,有什么建议吗?

REST API将是处理多个请求的更好选择。设计api以期望查询参数中的请求数据具有所需的筛选器和检查。如果您在当前状态下进行50-100次调用,那么API需要与多个表交互,如果数据巨大,那么用户体验可能会受到影响,因为页面加载可能会延迟。

用我可以建议的两种可能的方式之一来完善这个API:

  • 设计加载用户登录页所需的数据,并使用任何调度程序服务准备好这些数据,这样可以最大限度地减少实时执行的查询,如果数据不是实时的,则使用缓存来解决此问题
  • 如果你的页面设计负担得起,实现延迟加载以获得更好的体验

我建议这样做:

  1. 在客户端构建一个带有参数的JSON对象字符串,并对其进行url编码
  2. 使用参数的对象字符串作为查询字符串调用您的URL(HTTP/GET)
    https://your-baseurl/your-endpoint?p={...}
  3. 在服务器端解析查询字符串
  4. 连接到Postgresql
  5. 准备并运行复杂的参数化SQL查询,该查询返回JSON(可能是键值对对象的JSON数组),参数值取自解析的查询字符串。关于SO如何做到这一点,有很多例子
  6. 为了防止SQLi,请不要使用SQL文本替换,只准备语句
  7. 将查询结果放入响应中

Postgresql将在一个查询中完成所有繁重的工作——无论多么复杂——没有任何数据编组。

因此,API将是HTTP/GET,带有一个JSON参数,响应Content-Type: application/json表示一个键-值对数组。成功/失败-通过HTTP响应状态代码200或40X。

最新更新