16

我正在构建 Mash up 移动应用程序。我需要调用我的 API Provider 并与 Facebook 、 twitter 等集成。在此过程中,我必须对同一个域一个接一个地进行多个 REST API 调用(当然具有不同的路径和查询参数)。此外,API 调用必须是连续的,因为需要调用下一个。我可以通过哪些方式优化这些 http 调用以避免往返。欢迎对 java 和 js 提出建议

4

5 回答 5

21

规定的要求很广泛。由于您使用的是公共第三方 API,这在一定程度上限制了可能的优化范围。您绝对无法做任何事情来加速 API,因为它们不属于您。

一般来说,我建议遵循将帮助您提出更好的应用程序的指南。

  1. 拇指规则是尽可能少地调用 API
  2. 进行更少的网络调用(由 API 调用产生)将意味着设备无线电(用于通过空中与服务器通信)将不那么频繁地使用,因此所需的功率也更少。
  3. 现在,拨打更少的电话可能并不总是一种选择。因此,请仔细研究公共 API 文档,并确保您了解所需 API 的所有详细信息。
  4. 例如,可能有一个 API,它在传递实体标识符时提供实体的详细信息。如果您需要 5 个这样的实体的详细信息,那么应该有一个 API 接受一堆 ID 并立即返回所有详细信息。这样您就可以节省多次通话
  5. 缓存是减少 API 调用次数的非常有效的方法。因此,寻找从服务器接收到的任何可以缓存一段时间的数据。
  6. 请注意,缓存需要更多内存,因此请确保您了解其含义并相应地决定需要缓存的数据量。
  7. 除了内存,数据也可以缓存在磁盘上,这将有助于减少内存使用。不确定您是否使用 Android,请参阅此相关帖子

在旁注中,您可以参考以下链接,这些链接提供了开发移动应用程序的一般指南。

  1. 让您的应用程序飞速发展
  2. 为移动网络优化移动应用程序

请注意,这些是一般准则。有些可能不适用于您的特定用例。

于 2013-10-05T07:15:23.247 回答
2

如果您需要第一个 API 调用的结果来进行下一个 API 调用,那么您无法在客户端执行任何操作来避免每个 API 的顺序往返。要么需要一个现有的 API 调用,可用于将多个调用合并为一个,要么您需要将这样的 API 调用添加到服务器,或者您需要使用代理服务器来代表您执行此操作。

如果您不需要第一次 API 调用的结果来进行下一次 API 调用,但您只想按顺序处理结果,那么您可以一次进行所有 API 调用并将响应代码构造为按顺序处理它们(保存任何乱序到达的结果以供以后处理)。

于 2013-10-05T04:43:34.617 回答
1

REST 是统一的,因此,过滤器和往返行程对于完成特定功能是必要的。当涉及到优化和将多个客户端请求模拟到 ONE 中时,您将慢慢开始面临统一范式的挑战,因为它的客户端可能比 ONE UNIFIED 调用中的合约更具体。虽然可以对 REST 进行大量优化以将 API 调用的数量减少到两个甚至一个调用,但有时,您的客户端请求将需要复杂的过滤,这需要在应用额外的过滤逻辑之前从服务器获得反馈。

如果您的要求是您绝对必须有一个 API 调用来处理来自服务器而不是客户端的特定客户端请求,而所有过滤器都不适用,那么 RPC 将是您的选择,它将处理特定的业务逻辑从服务器到其他微服务(SOA)的宁静方式。

真正的问题是,如果您想保持 REST API 统一和一致并让客户端实现自己独特的逻辑,为什么还要让服务器来处理此类请求。REST API 服务器应为客户端提供超链接/超媒体,以指导客户端以最佳方式减少 API 调用次数,无论是通过过滤还是任何其他实体/资源。

于 2015-02-26T16:54:50.553 回答
1

编程级别——使用代码优化/线程/并行编程。

API 级别- 使用分页/过滤器/范围来生成适合客户需求的细粒度数据。

缓存- 在某处听说“最快的 HTTP 调用是你不做的”,即使用缓存(Memcache/Redis),大多数请求都是读取操作,明智地使用缓存控制标头也很有用。这使数据库免于服务昂贵的重复读取请求。(不确定 Etags 是否有用?)

请求/响应- 对通过 Web 传输的数据使用 JSON 序列化程序和 gZip 压缩技术。

地理- 考虑到最终用户和原始服务器之间的距离,我们可以使用 CDN 来存储响应的静态内容,以便可以真正快速地提供服务。

(听说过提高 API 性能的异步方法/反应式编程,但不太确定)

于 2018-07-16T02:28:03.063 回答
-3

如果你可以使用 jQuery,我建议你看看我的插件jQuery Chain,它可以帮助使异步调用顺序。

于 2013-10-05T07:16:41.807 回答