如何优化REST API调用

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

所述要求很广泛。 由于您使用的是公共第三方API,这在某种程度上限制了可能的优化范围。 绝对没有什么可以加速API,因为它们不属于你。

一般来说,我建议遵循以下指南,这将有助于您提出更好的应用。

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

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

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

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

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

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

REST是统一的,因此,filter和往返是完成某项function所必需的。 当谈到优化并将多个客户请求模拟为一个时,您将慢慢开始面对统一范例的挑战,因为客户端可能比合同在一个统一呼叫中可以做的更具体。 虽然可以对REST进行大量优化以将API调用的数量减少到两个甚至一个调用,但有时,您的客户端请求将需要复杂的过滤,这需要在应用其他过滤逻辑之前从服务器获得反馈。

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

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

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

API级别 – 使用分页/filter/范围来生成根据客户端需求定制的细粒度数据。

缓存 – 听说某个地方“最快的HTTP调用就是你没有做的”就是使用缓存(Memcache / Redis),大多数请求都是读操作,明智地使用缓存控制头也很有用。 这使数据库免于提供昂贵的重复读取请求。 (不确定Etags是否可以使用?)

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

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

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

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