API设计:响应中的数据与另一种方法



在响应中返回数据的最佳实践是什么,其中向API发出的请求依赖于各种异步调用来获取数据?

方法1例如

  • 提出请求
  • 然后函数必须获取/处理a/b/c/d异步事物
  • 返回数据

我的一种方法是等待并返回res.data(..(express(中的数据,然而,这似乎是一种糟糕的做法-响应可能需要一段时间,例如5-10秒的

方法2:第二种方法是

  • 提出请求
  • 快速返回200 ok响应
  • 然后函数必须获取/处理a/b/c/d异步事物
  • 将此数据POST到应用程序的另一个端点,以便接收和显示

方法2是最好的方法,还是我错过了另一种常用的模式?

根据我的经验,有三种方法可以处理潜在的长响应时间,其中两种您已经掌握:

  1. 等待响应,就像你提到的那样,这可能需要一些时间,并且根据你的用例(例如,一个真正的人正在等待(可能不是最好的体验
  2. 发回一个200OK,表明服务器收到了请求并正在处理,然后客户端将向服务器发出GET请求,要求更新。(又称数据是从服务器"提取"的(
  3. 发回一个200OK,让客户端配置一个通知端点,服务器将在确定响应时通知客户端。(又称从服务器"推送"数据(

这三者都有好处,API设计的有趣之处在于正确答案取决于您的情况。

对于我工作的大多数应用程序,我倾向于推荐第三种选项,将响应从服务器推送到客户端。这是因为:

  • 当你收到通知时,你每次都在等待完美的时间。当你";"拉";来自服务器的响应,您可能发送GET请求过快而服务器尚未准备好,或者等待的时间超过了发送GET请求的时间
  • 您可以在向服务器发送请求和处理响应以及触发其他事件之间分离逻辑。我个人认为,当请求是异步的时,这种分离很有用

通知处理程序的结果是,它确实增加了软件的复杂性,而这可能不是您特定项目所需要的。

最新更新