gpt4 book ai didi

node.js - Node.js 中的 API 聚合

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:26 24 4
gpt4 key购买 nike

我正在尝试聚合多个位置 API 系统(Google、Foursquare 等),以便为用户提供不同的位置数据。交付基于用户位置,从而进行纬度、经度和半径搜索。

我在网络上搜索了特定的 API 聚合想法,但运气不太好,我只找到了许多用于服务器端 HTTP 请求的聪明的库。我具体寻找的是关于 geoJson 聚合最佳实现的意见。

我的选择(据我所知)是:

<小时/>

1. 在前端向用户公开多个基于位置的 API(Google、Foursquare 等),即每次用户移动到该位置时查询 API。

优点

  • 不间接存储 geoJson。
  • 没有服务器开销。
  • 没有潜在的违反使用条款的情况(我使用 Google map 来允许 Location API)。

缺点

  • 增加的 API 调用会购买每个用户(效率低下且可能成本高昂)
  • 缺乏整理结果和格式化数据交付的能力。
<小时/>

2. 以某种方式根据用户位置(大部分是静态的)在服务器上聚合 API 调用,根据需要使用“cron job”更新聚合。因此,数据传输被有效地预先缓存,并且可以根据用户偏好更容易地分页。

优点

  • 更快(位置数据被有效缓存)。
  • 更好地控制数据。
  • 减少 API 调用。

缺点

  • 可能违反使用条款(Google 仅允许用于缓存目的)
  • 服务器负载。
<小时/>

我意识到我可以通过在后端填充数据库的 http.get 调用来实现此目的(假设由于地理空间查询而使用 mongo)。这似乎是一个常见的用例,我找不到任何引用。

有人在 Node 中有这方面的经验吗?我觉得我错过了一些东西。谢谢

最佳答案

您对此了解不多,因为这是一项常见的任务,而且您在互联网上提出了错误的问题。

您正在描述聚合多个 http 请求结果,谷歌搜索会为您找到这些结果。

ES6 promise 使这变得简单而优雅:

Promise.all([
fetch("api.com/things"),
fetch("api2.com/otherthings"),
fetch("api3.com/yetotherthings")
])
.then(res=> {
//do something with res[0], res[1], res[2]
})

理论上,您也可以使用相同的模式在客户端完成这一切。但是,您想要调用的某些 api 很可能不允许从浏览器中调用它们自己(违反 CORS)。您很可能需要建立一个服务器作为代理,可以将调用传递到不支持浏览器请求的 API。

当然还有更多事情要做。如果任何单个 Promise 失败,Promise.all 都会失败。因此,您必须处理每次调用中可能发生的错误。此外,您的 api 调用的构造可能比上面简单的构造要复杂得多。您提到缓存结果等...

但以上是基本思想。

关于node.js - Node.js 中的 API 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39759676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com