如何优化REST API调用

时间:2013-10-05 04:32:15

标签: java javascript rest mobile

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

5 个答案:

答案 0 :(得分:12)

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

一般情况下,我建议遵循以下指南,以帮助您提出更好的应用。

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

    1. Make your application blazing fast
    2. Optimizing a Mobile App for Mobile network
    3. 请注意,这些是一般准则。有些可能不适用于您的特定用例。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

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

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

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

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

答案 4 :(得分:-2)

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