异步API的优势:Webhooks与WebSocket的用例和应用

21,315次阅读
没有评论

共计 3995 个字符,预计需要花费 10 分钟才能阅读完成。

在数字即时性和实时反馈主导用户期望的时代,异步 API 脱颖而出,成为增强交互性和效率的灯塔。

API 采用 Webhooks 和 WebSocket 模型,支持事件驱动的架构,为当今许多领先的技术平台提供支持。让我们通过有效集成异步 API 的公司示例来探讨异步 API 的前五项技术优点。

什么是 Webhooks 和 WebSocket?

让我们首先检查一下 webhook 和 WebSocket 之间的区别。

Webhooks 是无状态的,这意味着每个事件通知都是独立的,并携带有关该事件的所有必要信息。Webhook 的行为很像 RESTful API 调用,因为 HTTP 是无状态协议,每个连接都需要为给定资源所需的操作提供自己的上下文。Webhook 通常在事件发生时根据需要进行调用,这与 WebSocket 等持久连接不同。

另一方面,WebSocket 是有状态的,这意味着客户端和服务器保持持久连接,并且可以在连接的整个生命周期中共享状态信息。这种持久的连接允许客户端和服务器记住对话的“状态”。但是,如果 WebSocket 连接中断并重新建立,则客户端和服务器需要该连接中有足够的上下文才能恢复对话。

实时互动和参与

异步 API(尤其是 WebSocket)最重要的优势之一是能够提供实时交互性。与传统的请求 - 响应模型不同,WebSockets 建立了双向通信通道,使服务器能够即时将数据推送到客户端。Slack 协作平台利用 WebSocket 即时传递消息和通知,确保无缝的对话体验。最终结果是用户群高度参与,数据实时交换。

Slack 还允许用户使用第三方 Webhooks 将事件驱动架构提升到另一个层次。用户可以根据外部事件在 Slack 中生成内容,反之亦然,以便在 Slack 中创建消息时触发外部 Webhook。

有效利用资源

Webhooks 是异步 API 的一个组成部分,在优化资源使用方面发挥着关键作用。系统可以依靠 Webhooks 在发生特定事件时通知服务器,而不是定期(且持续)轮询服务器以获取数据或检查任务是否完成。GitHub 是流行的软件开发平台,它利用 Webhook 进行各种操作,例如在进行新提交时提醒持续集成 (CI) 工具。这消除了不必要的网络请求,减少了服务器负载并确保最佳性能。

也就是说,WebSocket 仍然大约每 30 秒发送一个“保持活动”数据包,以维持客户端和服务器之间的连接。然而,这种方法仍然比典型 RESTful API 的轮询方法高效得多。

增强的可扩展性

由异步 API 提供支持的事件驱动架构的一个固有优势是它们能够轻松扩展。支付基础设施巨头 Stripe 使用 Webhooks 通知用户不同的事件,例如费用完成或发票更新。通过将事件生成与其消耗分离,Stripe 确保其系统保持弹性并能够根据需求进行扩展,而不会降低性能。

可扩展性是 API 性能的一个有趣的方面。WebSocket 的早期限制是服务器可以处理的并发客户端数量,但负载均衡器和虚拟网络的一些巧妙的网络技巧现在允许数百万个连接。

改善用户体验

随着需要即时反馈的 Web 应用程序的兴起,异步 API 提供了无与伦比的用户体验。Trello 是一款可视化协作工具,它使用 WebSockets 来实时更新看板和卡片。当团队成员进行更改时,其他所有成员都会立即查看更新,这支持协作并有助于让每个人都保持在同一页面上。

许多组织可以使用“发布 / 订阅模式”(通常也称为“发布订阅”)以这种方式让客户端保持最新状态。当事件发生时,例如团队成员在 Trello 中更新卡片,该事件会“发布”到其他团队成员在加载 UI 时订阅的频道。WebSocket 连接“订阅”这些事件通道,并且队友的客户端可以对该新事件采取行动。

集成的灵活性

异步 API 的一个经常被低估的优点是它们在第三方集成中提供的灵活性。像 Zapier 这样的自动化工具平台,依靠网络钩子来连接不同的系统而蓬勃发展。用户可以在一个应用程序中设置触发器以在另一个应用程序中启动操作,从而编织一个同步工作的互连工具网络。这种灵活性可加快工作流程并自动执行手动任务,从而提高效率。

与上述“pubsub”模型类似,Zapier 等工具也可以将这些事件发布到类似的通道,从而允许同时触发多个并行事件。

注意事项:当异步可能不理想时

尽管 RESTful 架构可以模仿上面提到的许多功能,但异步 API 比 RESTful API 具有很多优势。然而,尽管有这些新功能,重要的是要认识到异步架构可能不适合哪些地方。

1、数据一致性:数据一致性在许多应用程序中至关重要,尤其是银行平台等金融系统。异步系统有时会导致暂时的数据不一致,这在这种情况下可能是有害的。因此,使用非常详细的时间戳以便了解要按正确的顺序处理哪些信息非常重要。

2、复杂的错误处理:处理异步设置中的错误可能比同步设置中的错误更复杂。事件何时生成以及何时处理的“未知”性质意味着错误可能需要复杂的恢复机制来重放所发生的情况。结果,重现错误变得更加复杂。

3、基础设施的开销:异步架构,尤其是由 Webhook 驱动时,可能需要强大的基础设施来管理事件订阅和传递。对于小型应用程序或初创公司来说,这种开销可能是多余且不必要的。

示例

以下是一个使用 Python 编写的示例代码,演示如何使用异步 API(WebSocket)进行实时交互:

import asyncio
import websockets

async def handle_message(message):
    # 处理收到的消息
    print("Received message:", message)

async def websocket_client():
    async with websockets.connect('wss://api.example.com') as websocket:
        # 进行连接后的初始化操作
        await websocket.send('init')
       
        while True:
            # 接收消息
            message = await websocket.recv()
           
            # 处理消息
            await handle_message(message)

# 启动 websocket 客户端
asyncio.get_event_loop().run_until_complete(websocket_client())

上述示例中,我们使用了 websockets 库来建立 WebSocket 连接并接收数据。在 websocket_client 函数中,我们首先进行连接后的初始化操作(例如发送初始消息),然后进入一个循环,不断接收服务器推送的消息,并通过 handle_message 函数进行处理。

这只是一个简单的示例,实际应用中可能需要根据具体情况添加更多的处理逻辑和错误处理机制。另外,请注意替换 ’wss://api.example.com’ 为实际的 WebSocket 服务器地址。

对于使用 Webhooks 的异步 API,可以通过设置 HTTP 回调来接收事件通知。以下是一个示例代码,展示如何使用 Flask 框架接收 Webhooks 事件:

from flask import Flask, request

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def handle_webhook():
    # 处理接收到的 Webhook 事件
    event = request.json
    print("Received event:", event)
   
    # 进行相关处理...
   
    return 'OK'

# 启动 Flask 应用
if __name__ == '__main__':
    app.run()

上述示例中,我们使用了 Flask 框架创建一个简单的 HTTP 服务器,并定义了一个 /webhook 的路由,用于接收 POST 请求。在 handle_webhook 函数中,我们可以处理接收到的 Webhook 事件数据,并返回适当的响应。

这只是一个简化的示例,实际应用中可能需要根据具体需求对接收到的事件进行解析和处理。另外,请注意按照实际情况配置 Flask 应用的运行环境和网络设置。

总结

选择使用异步 API(无论是通过 webhooks 还是 WebSockets)的理由在于构建可扩展、高效和交互式的应用程序。像 Slack、PayPal 和 Stripe 等平台展示了这种架构的优势。然而,该方法的适用性取决于应用程序的具体要求和限制。与所有架构决策一样,需要进行仔细的需求分析和权衡。但是,当与正确的用例相匹配时,异步 API 成为数字工程的现代奇迹。

关键词:异步 API,Webhooks,WebSocket,事件驱动架构,实时互动,资源利用,可扩展性,用户体验,集成灵活性 文章来源地址 https://www.toymoban.com/diary/system/537.html

到此这篇关于异步 API 的优势:Webhooks 与 WebSocket 的用例和应用的文章就介绍到这了, 更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持 TOY 模板网!

原文地址:https://www.toymoban.com/diary/system/537.html

如若转载,请注明出处:如若内容造成侵权 / 违法违规 / 事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计3995字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)