如何优化REST API调用
我正在构建Mash up移动应用程序。 我需要调用我的API提供程序并与Facebook,Twitter等集成。在此过程中,我必须一个接一个地对同一个域(具有不同的路径和查询参数)进行多个REST API调用。 API调用也必须是顺序的,因为需要调用下一个调用。 有什么方法可以优化这些http调用以避免往返。 欢迎对java和js的建议
所述要求很广泛。 由于您使用的是公共第三方API,这在某种程度上限制了可能的优化范围。 绝对没有什么可以加速API,因为它们不属于你。
一般来说,我建议遵循以下指南,这将有助于您提出更好的应用。
- Thumb规则使尽可能少的API调用 。
- 减少网络呼叫(由API呼叫产生)将意味着设备无线电( 用于通过空中与服务器通信 )将不那么频繁地使用,因此需要更少的功率。
- 现在,减少呼叫次数可能永远不是一种选择。 因此,请仔细研究公共API文档 ,确保您了解所需API的所有详细信息。
- 例如,可能存在API,其在传递其标识符时提供实体的细节。 如果你需要5个这样的实体的细节,那么应该有一个API,它接受一堆ID并一次返回所有细节。 这样您就可以保存多个电话 。
- 缓存是减少API调用次数的非常有效的方法。 因此,查找从服务器收到的任何数据,可以缓存一段时间。
- 请注意,缓存需要更多内存,因此请确保您了解其含义并相应地确定需要缓存的数据量。
- 除内存外,数据也可以缓存在光盘上,这有助于减少内存使用量。 不确定您是否使用Android,请参阅此相关post 。
在旁注中,您可以参考以下链接,这些链接提供了开发移动应用程序的一般准则。
- 让您的应用程序快速发展 。
- 优化移动网络的移动应用程序 。
请注意,这些是一般准则。 有些可能不适用于您的特定用例。
如果您需要第一个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 ,它可以帮助进行异步调用顺序。