我正在构建Mash up移动应用程序。我需要调用我的API提供程序并与Facebook,Twitter等集成。在此过程中,我必须一个接一个地向同一个域(具有不同的路径和查询参数)进行多个REST API调用。此外,API调用必须是顺序的,因为需要调用下一个调用。有什么方法可以优化这些http调用以避免往返。欢迎提出对java和js的建议
答案 0 :(得分:12)
所述要求很广泛。由于您使用的是公共第三方API,因此在某种程度上限制了可能的优化范围。你无法做任何事情来加速API,因为它们不属于你。
一般情况下,我建议遵循以下指南,以帮助您提出更好的应用。
在旁注中,您可以参考以下链接,这些链接提供了开发移动应用程序的一般指南。
请注意,这些是一般准则。有些可能不适用于您的特定用例。
答案 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,它可以帮助进行异步调用顺序。