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

标签 node.js geojson

我正在尝试聚合多个位置 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/

相关文章:

mysql - Sequelize : TimeoutError: ResourceRequest timed out

node.js - 如何使用 Restify 服务器在 GridFS 中存储请求正文?

Javascript 函数乱序完成——异步

d3.js - 如何使用 D3 从 GeoJSON 数据集中获取投影路径定义字符串(不是 SVG 元素)?

javascript - 使用 Mongoose 添加几何集合

javascript - 如何在 Node js 中使用加密生成唯一的 8 位数字?

node.js - 多个组织在沙发上的最佳实践

AngularJS 从 GeoJSON 响应获取坐标

javascript - 编辑巨大的 geoJSON 的最简单方法?

javascript - React leaflet map 库中的GeoJSON样式