【问题标题】:How does an API callback work and how can I implement one?API 回调如何工作以及如何实现?
【发布时间】:2021-09-12 05:15:03
【问题描述】:

我对这些回调的工作原理有点困惑。

我看到一些 REST API 要求回调 URL 主要用于身份验证(Oauth),如果我理解正确,API 会在完成后调用后端实现的端点。但是,如果这是一个网站并且 API 调用一个后端,它将如何调用用户触发该 API 调用的特定会话?

我们是否会生成一些唯一的 ID 并使用它来识别每个会话?

除了身份验证之外,是否有可能实现类似的功能?

对不起,如果这看起来微不足道,但我已经尝试了好几个小时了。

提前致谢! :)

P.S:我正在使用 FastAPI 在 python 中进行尝试。

【问题讨论】:

    标签: python api fastapi


    【解决方案1】:

    是的,您通常包含一个标识“交易”的密钥。一个是预共享的(对于 webhook,其中一个 API 在事件发生的特定时间进行回调,并且请求不是对您发起的某事的响应),或者是您在重定向后生成以识别会话本身的一个您自己的应用程序之外的用户。

    remote server makes a request to /webhooks?key=foo
    

    .. 或通常发生的情况,包括作为 HTTP 标头的签名,该签名基于已交换的密钥对消息进行签名。

    参见例如Stripe's webhook documentation for an example of how the request is signed

    但是,如果用户被重定向回您的应用程序(这是许多身份验证方案的流程),则重定向回给用户的客户端 - 他们的会话仍将处于活动状态。在这种情况下,重定向将包含来自身份验证系统的会话标识符,然后您可以在后端使用该标识符来验证用户是否实际通过了身份验证以及使用何种授权。

    /foo -> redirect -> https://remote/auth
    (enters authentication information)
    https://remote/auth -> redirect -> /authenticated?secret_key=foobar
    

    【讨论】:

    • 所以如果我要在我的 API 中实现一个 webhook 来调用网站后端,我仍然需要添加一个事务密钥,对吧?
    • 从第三方调用webhook;它不是自己调用的。如果回调与您与第三方执行的操作有关,您通常会得到一个交易 id/事件 id/用户配置的唯一 id 来识别发起请求,是的(例如支付交易)。
    • 哦,好的。谢谢你的回答。
    • 嘿,既然你说这使用事务 ID 等,我已经放弃了使用 API 回调的计划。但是现在我需要在对我的 API 进行条带化 webhook 调用后创建一个 EC2 实例,然后通知 Web 后端该实例已被配置。你能告诉我最好的方法是什么吗?我在这里问它,因为它看起来类似于回调。
    • webhook 应该调用一个可以完成实际任务的工作人员(比如 Celery 就很合适)。然后,您可以在任务完成时调用 webhook 到 web 后端,或者它可以添加另一个 celery 任务,在任务完成时执行所需的任何操作(例如发送电子邮件,更新数据库中的状态等)。
    猜你喜欢
    • 2015-04-08
    • 1970-01-01
    • 2011-11-10
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2019-01-08
    • 1970-01-01
    相关资源
    最近更新 更多