Bootstrap

深入探索:异步接口与常规接口的区别与优势

负责公司API相关业务,在设计异步接口时调研累计到的经验,记录一下。

什么是异步接口?

异步接口是一种允许系统在等待某个操作完成期间继续执行其他任务的编程模型。在常规(同步)接口中,系统必须等待操作完成才能继续执行后续代码。然而,异步接口通过将操作委托给其他线程、进程或者服务器,使得系统能够在等待操作完成的同时处理其他任务,从而提高了系统的并发性和响应性能力。

异步接口与常规接口的区别:
  • 执行方式:常规接口是同步执行的,也就是说,系统在调用接口后会等待接口返回结果后再继续执行后续代码。而异步接口是非阻塞的,系统在调用接口后会立即返回并继续执行后续代码,不需要等待接口返回结果。
  • 并发性:由于异步接口的非阻塞性质,系统可以在等待接口返回结果的同时处理其他任务,提高了系统的并发性能。而常规接口在等待操作完成期间,系统无法执行其他任务。
  • 响应性:异步接口可以提升系统的响应性能。例如,在一个用户界面应用中,当用户触发某个操作时,异步接口可以在后台进行耗时的操作,而用户界面仍然保持响应,不会被阻塞。常规接口则会导致用户界面出现卡顿或无响应的情况。
  • 错误处理:异步接口通常提供更灵活的错误处理机制。由于异步接口不会阻塞系统执行,它可以通过回调函数、事件或者异常处理机制来处理操作完成后的结果或错误。而常规接口通常采用返回值或异常来处理错误,限制了错误处理的灵活性。
我们来举个通俗的🌰例子解释异步接口和常规接口的工作原理

场景:当我们去银行办理某项业务,常规接口和异步接口的工作方式可以用以下例子来说明

常规接口:

假设你需要去银行办理一项业务,按照常规接口的方式,你会按照以下步骤进行操作:

  • 前往银行柜台,提交所需的文件和表格。
  • 柜员会检查你的文件和表格,并开始处理你的请求。
  • 在处理过程中,你需要等待柜员完成所有必要的步骤。
  • 最后一直等待柜员会通知你办理结果。

在这个例子中,你需要一直等待柜员完成整个办理过程,并且无法进行其他任务,直到你收到最终的结果。这类似于常规接口的工作原理,即在提交请求后,必须等待操作完成并获取结果,才能继续执行其他任务。

异步接口:

现在,让我们看看使用异步接口的方式来办理同样的业务:

  • 前往银行柜台,提交所需的文件和表格。
  • 柜员会告诉你,办理过程需要一些时间,并要求你提供一个联系电话。
  • 你提供了手机号,并告知柜员可以通过电话通知你结果。
  • 在提供联系电话后,你可以离开银行,并进行其他任务。
  • 一旦你的请求处理完成,银行工作人员会打电话通知你结果。
  • 你可以根据通知返回银行,获取结果或者采取进一步的行动。

在这个例子中,你在提交请求后,并不需要一直等待办理过程完成。你留下了一个联系电话,允许银行工作人员在处理完成后通过电话通知你结果。这使得你可以在等待过程中继续进行其他任务,而不必一直停留在银行。这类似于异步接口的工作原理,即在提交请求后,你不需要等待结果,而是提供一个回调机制(电话通知)来通知你操作完成的结果。

结论

通过这个例子,我们可以更好地理解常规接口和异步接口的工作原理。常规接口需要一直等待操作完成并获取结果,而异步接口通常会允许你提供一个回调机制,在等待过程中进行其他任务,并在操作完成后通知你结果。这使得异步接口在提高效率和提供更好用户体验方面具有优势。

参考企业微信异步接口

工作流程:
1、创建导出任务(根据应用id创建导出任务)
2、获取导出结果(根据任务id,获取导出数据下载链接)
3、同时提供应用导出完成的消息推送(通过配置的回调地址用于接收消息推送)

接口文档地址:https://developer.work.weixin.qq.com/document/path/94849
在这里插入图片描述

回调地址的规范

为了保证用户配置的回调地址是可执行的,通常需要在接口设计时需要规范好回调地址的格式,这样便于开发人员去实现。地址规范需在开放文档中说明。

回调地址的规范怎么去定义?常见的规范如下:

  1. 规范回调地址的请求方法post/get,包括回调返回的数据结构(包括成功时返回、失败时返回)
  2. 通知url必须为外网可访问的url ,若将回调地址配置为内网地址,可能会由于ip限制等原因造成无法完成回调的结果,从而导致不能收到回调信息
  3. 不能携带任何参数 (这个根据开发实际情况而定)
  4. 公网域名必须为https/http(这个根据开发实际情况而定),插播一篇文章:你真的理解HTTP和HTTPS的区别吗?
  5. 不支持携带端口号(这个根据开发实际情况而定)
实际案例说明
  1. 飞书回调地址规范
    接口文档地址:https://open.feishu.cn/document/ukTMukTMukTM/uUTNz4SN1MjL1UzM?lang=zh-CN#2eb3504a
    在这里插入图片描述
  2. 用友-畅捷通回调地址规范
    接口文档地址:https://open.chanjet.com/docs/file/guide
    在这里插入图片描述
异步接口的常用场景
  • 网络请求:当应用程序需要进行网络通信时,使用异步接口可以避免阻塞主线程或用户界面,提高用户体验。例如,在Web开发中,使用异步接口可以发起AJAX请求,从服务器获取数据而不阻塞页面加载和用户操作。

  • 文件操作:在读取或写入大型文件时,使用异步接口可以避免长时间的阻塞,允许应用程序在后台进行其他操作。这对于处理大量数据或进行复杂的文件处理操作特别有用。

  • 并行计算:当需要进行耗时的计算或处理任务时,使用异步接口可以将这些任务分配给不同的线程或进程,并行执行,以提高系统的性能和吞吐量。这在科学计算、图像处理、视频编码等领域常见。

  • 消息队列:异步接口常用于实现消息队列系统,用于解耦和处理大量的异步消息。消息发送方可以通过异步接口将消息发送到队列,而消息接收方可以异步地从队列中获取和处理消息,实现高效的消息传递和处理。

  • 异步事件处理:在事件驱动的系统中,使用异步接口可以处理各种异步事件,如用户输入、传感器数据、定时器事件等。通过异步接口,系统可以立即响应事件并进行相应的处理,而不会阻塞其他事件的触发和处理。

  • 外部系统集成:当与外部系统进行交互时,使用异步接口可以提高系统的可扩展性和可靠性。例如,与第三方API进行通信时,使用异步接口可以在等待响应期间处理其他任务,从而提高系统的并发性和容错能力。

总之,异步接口在许多情况下都能发挥重要作用,特别是在处理并发操作、提高系统性能和响应性能力方面。它们适用于各种应用场景,包括网络通信、文件操作、并行计算、消息队列、异步事件处理以及外部系统集成等。开发者可以根据具体需求和业务逻辑,合理选择和应用异步接口来优化系统的设计和性能。

;