Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何优化RESTAPI调用_Java_Javascript_Rest_Mobile - Fatal编程技术网

Java 如何优化RESTAPI调用

Java 如何优化RESTAPI调用,java,javascript,rest,mobile,Java,Javascript,Rest,Mobile,我正在构建mashup移动应用程序。我需要调用我的API提供商,并和Facebook、twitter等进行集成。在这个过程中,我必须对同一个域(当然是使用不同的路径和查询参数)逐个进行多个REST API调用。此外,API调用必须是连续的,因为需要一个调用下一个调用。我可以用什么方法优化这些http调用以避免往返。欢迎对java和js提出建议如果您需要第一次API调用的结果以便进行下一次API调用,那么您在客户端无法避免每次调用的顺序往返。可能需要一个现有的API调用来将多个调用合并为一个调用,

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

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


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

所述要求非常广泛。由于您使用的是公共的第三方API,这在一定程度上限制了可能的优化范围。由于API不属于您,因此您绝对无法加快API的速度

总的来说,我建议遵循以下指导原则,这将帮助您提出更好的应用程序

  • 拇指规则是尽量少调用API
  • 进行较少的网络调用(由API调用产生)将意味着设备无线电(用于通过空中与服务器通信)的使用频率将降低,因此所需的电源也将减少
  • 现在,打更少的电话可能并不总是一种选择。因此,请仔细研究公共API文档,确保您了解所需API的所有详细信息
  • 例如,可能存在一个API,它在传递实体标识符时提供实体的详细信息。如果您需要5个这样的实体的详细信息,那么应该有一个API,它接受一组ID并一次返回所有详细信息。这样,您可以保存多个通话
  • 缓存是减少API调用数量的非常有效的方法。所以,请查找从服务器接收到的任何可以缓存一定时间的数据
  • 请注意,缓存将需要更多内存,因此请确保您了解其含义,并相应地决定需要缓存的数据量
  • 除了内存,数据还可以缓存在光盘上,这将有助于减少内存使用。不确定您是否正在使用Android 在旁注中,您可以参考以下链接,这些链接提供了开发移动应用程序的一般指南


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

    如果您可以使用jQuery,我建议您看看我的插件,它可以帮助实现异步调用顺序

    REST是统一的,因此,过滤器和往返是实现特定功能所必需的。当涉及到优化和将多个客户机请求模拟成一个请求时,您将慢慢开始面临统一范例的挑战,因为it客户机可能比合同在一次统一调用中所能做的具体得多。虽然可以对REST进行大量优化,将API调用的数量减少到两个甚至一个调用,但有时,您的客户机请求将需要复杂的筛选,在应用额外的筛选逻辑之前,需要服务器提供反馈

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


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

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

    API级别-使用分页/过滤器/范围生成细粒度数据,以适应客户端的需要

    缓存-听说过“最快的HTTP调用是你不做的”,也就是说,使用缓存(Memcache/Redis),大多数请求都是读取操作,明智地使用缓存控制头也很有用。这样就避免了数据库为重复的读取请求提供服务,而重复的读取请求代价高昂。(不确定ETag是否有任何用途?)

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

    地理位置-考虑到最终用户和源服务器之间的距离,我们可以使用CDN存储响应的静态内容,以便能够快速提供服务


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

    你能在REST API方面做出改变吗?@JunedAhsan,这似乎不太可能。因为一些API OP提到的是FB Tw等。@Santosh哦,我错过了,很糟糕