在启动时在 Sanic 中动态加载路由的值

Load the value of a route dynamically in Sanic at startup

我想在服务器启动时对外部服务进行异步 HTTP 调用,然后从那里获取一个 URL,然后我可以在我自己的 Sanic 路由中使用它。例如,通过 httpx 调用获取需要作为我的实际路由的字符串(为了简单起见,假设外部服务返回的字符串是 api/users/),然后将其用作路由在我的 Sanic 微服务中。

不幸的是,before_server_start 侦听器似乎无法解决问题,因为那是 运行 在加载路由后,如果我尝试更新字符串值,我会得到 FinalizationError("Cannot finalize router more than once.")一条路线。

关于在定义/添加路由之前我还能如何连接我的电话的任何想法?我想让它尽可能与 Sanic 应用程序耦合,即不使用在它之前 运行 的实用程序脚本,而是在每次应用程序启动时触发对外部服务的调用。

您可以在 before_server_start 活动中进行,稍作迂回。

@app.before_server_start
async def setup_dynamic_routes(app, _):
    app.router.reset()

    # add your routes here

    app.router.finalize()