同步/异步 API

17 Mar 2025 | 6 分钟阅读

应用程序编程接口(API)对于促进各种软件结构或组件之间的通信至关重要。API 允许您通过与客户端和服务器协作来执行复杂的业务操作。它们允许应用程序与后端服务器服务进行接口。为此,通常使用几种通信通道,通常分为同步和异步。

异步和同步架构是创建管理多个组件或系统之间通信和处理的系统的两种技术。理解这些架构之间的区别对于创建和实现能够满足特定应用程序的独特需求的高效且有效的系统至关重要。

Synchronous/Asynchronous API

同步 API

在同步 API 设计中,客户端向服务器提交一个请求,服务器随后会立即响应客户端。在收到响应之前,客户端必须完全等待服务器处理该请求。这表明客户端和服务器之间的数据流是同步的,并且客户端必须在执行任何其他操作之前等待响应。

它们使用 SOAP、REST 等传统协议。这些 API 同步处理查询。因此,在继续应用程序之前,客户端必须等待 API 的响应。它们无法同时处理两个请求。因此,如果一个请求花费的时间较短,它可能会成为性能瓶颈。

应用

  • 在电子商务应用程序中,客户端应用程序可能被迫等待 API 响应,然后才能显示产品信息,包括可用性、价格和送货选项。同步 API 设计可确保显示给用户的信息是最新的和准确的。
  • 医疗保健应用程序可以使用同步 API 来获取患者数据、安排预约以及请求实验室检查。在医疗保健行业,同步 API 设计还有助于确保患者数据的准确和及时传输。
  • 银行和金融应用程序通常依赖同步 API 调用来验证个人凭证、进行交易以及访问账户记录。同步 API 在防止欺诈活动和保护用户数据方面非常有用。
  • 同步 API 通常用于旅游和酒店业应用程序,以获取有关航班、预订和汽车租赁的信息。同步 API 设计有助于确保提供给用户的信息是最新的和准确的,以及防止超额预订或多次预订。

异步 API

使用异步 API 设计时,客户端会向服务器发送一个请求;但是,服务器无法立即响应该请求。当客户端等待服务器完成处理请求时,它可以选择进行其他活动。然后,当服务器准备好传输响应时,客户端可以从服务器接收响应。这表明客户端和服务器之间发生异步通信,并且客户端在等待响应时不会受到阻碍。

  • 异步 API 可以对单个请求做出多个响应。此设计不定期提供数据,而是允许它们向用户提供事件流。这就是为什么它们通常被称为事件驱动 API。它们还可以将资源密集型请求转移到在后台运行且不干扰其他请求的另一个线程。由于它们采用客户端和服务器之间的远程后台通信路径,从而消除了不必要的查询,因此它们需要的带宽更少。

应用

  • 在物联网应用程序中,大量数据通常在设备和服务器之间传输。异步 API 可以通过允许设备在完成其他任务的同时传递数据来帮助处理这些数据。
  • 异步 API 可以帮助需要玩家之间实时交互的游戏应用程序。异步 API 在及时准确地处理游戏事件方面很有用,而不会导致游戏延迟或中断。
  • 在社交网络应用程序中,上传和处理大量媒体数据等复杂活动很常见。异步 API 可以通过允许用户在后台处理素材的同时继续使用该应用程序来帮助管理这些任务。
  • 异步 API 通常被实时消息传递系统(如聊天应用程序)使用,以快速有效地发送消息。异步 API 有助于确保消息实时送达,而不会对用户体验造成延迟或干扰。

通过示例区分同步和异步 API

同步通信(电话)

实时交互

将拨打手机通话作为类比。双方都在实时通信。当一个人说话时,另一个人可以立即回应。同步操作,例如同步 API 调用,包括客户端应用程序发送请求并等待系统立即响应。交互被阻塞,这意味着该系统可能会在收到响应之前暂停或停止。

阻塞性质

在手机通话中,一个人通常会说话,而另一个人则等待并聆听。通信是同步的,双方都在时间同步。在同步 API 请求期间,系统通常会等待响应,然后再继续执行其他活动。这可能导致应用程序被冻结,直到所需操作完成。

即时反馈

手机讨论提供了即时反馈。当一个人提出问题时,他们期望立即得到答复。同样,在同步 API 请求中,客户端期望从系统获得快速即时的响应。同步操作的结果决定了程序的流程。

异步通信(电子邮件)

独立于时间的通信

电子邮件通信异步是一个很好的类比。发件人不会期望立即得到答复,而是会继续处理自己的事务。异步操作(例如异步 API 调用)由客户端发起,不会等待即时响应。系统会自行处理请求,让客户端可以专注于其他任务。

非阻塞特性

发送电子邮件后,您不必等待触发的响应即可继续执行其他任务。从编程角度来看,异步操作是非阻塞的。系统在收到请求后不会终止;相反,它会继续运行。当系统准备好时,它将处理请求并做出响应。

灵活的响应时间表

电子邮件通信提供了响应时间的灵活性。有些电子邮件可能需要更快的答复,而另一些则可能更随意。异步操作可以包含定义响应预期持续时间的参数。例如,应用程序可能声明它需要在小时内得到响应,或者它可能有更灵活的响应时间。

超时假设

发送电子邮件时,您不会期望立即得到答复;在收到答复之前会有一个时间延迟。在异步编程中,隐含的假设是响应可能需要一些时间。应用程序可以配置为超时或在响应到达时进行处理。

混合同步和异步 API

混合系统结合了同步和异步技术。它可以使用实时 HTTP 进行同步通信,确保在需要时提供即时响应。同时,它可以包含异步通信协议,使系统能够以更延迟的方式处理任务。这种混合方法为系统提供了更大的灵活性。它能够适应不同类型的用户交互,并根据请求的性质优化资源使用。

混合系统根据用户请求的类型动态分配资源。同步技术用于关键和实时任务,以提供即时结果。异步技术允许系统为不太敏感的任务更有效地分配资源。通过允许系统适应可变的工作负载,混合范例提高了可伸缩性。在重负载期间,可以谨慎使用同步技术以保持响应能力,而在较空闲时段,异步技术有助于负载分配。混合系统在响应能力和资源效率之间找到了平衡,在优化计算资源利用率的同时提供了令人满意的用户体验。

结论

异步和同步 API 设计之间的主要区别在于,同步结构是一个阻塞过程,其中客户端必须等待服务器的响应。相比之下,异步架构允许客户端在等待响应的同时执行其他操作。

根据系统的特定需求,包括性能要求、可伸缩性和所需的灵活性,可以选择同步和异步系统。尽管同步设计比异步系统更简单,但它们在灵活性和可伸缩性方面可能不如异步系统。异步结构提供了更大的灵活性和可伸缩性,但设计和实现起来更复杂。