Flask 或其衍生产品之一:一条路由来处理配置文件中定义的多个端点?

Flask 或其衍生产品之一:一条路由来处理配置文件中定义的多个端点?

我们在 Python 3.11 下使用 Flask-3.0.2。

我们想要编写一个高度可配置的 REST 服务,它可以管理几十个端点,这些端点的特性在配置文件(YAML 或 JSON)中定义,只要我们想要添加、删除或更改任何端点的行为,就可以更改该文件。

每个端点将由一个 python 文件管理,该文件在处理 REST 请求时动态加载。

我们不想每次添加、更改或删除路由时都编写并重写修饰过的 Python 路由函数。我们希望只有一个 Python 路由函数,该函数读取配置文件,然后每当传入的 URL 与配置文件中的条目匹配时,加载并调用匹配的端点特定动态加载函数。

例如,假设配置文件如下所示(YAML 示例):

---
actions:
    /server/func0: func0.py
    /server/func1: func1.py
    /xyz/xyzfunc:  xyzfunc.py
    /abc/abcfunc:  abcfunc.py
...

在这个例子中,发送到我们的 REST 服务器的 URLhttp://example.com/server/func0会导致代码func0.py被动态加载然后调用,类似的 URLhttp://example.com/abc/abcfunc会导致abcfunc.py代码被动态加载然后调用,等等。

此外,每个端点可以采用一组参数,这些参数也将通过 REST 调用的 URL 或 JSON 传递,并且这些参数可能会有所不同,具体取决于调用哪个端点。

我假设管理这个端点的 Flask 代码看起来像这样:

@app.route('/', methods=['GET', 'POST'])
def generic_router():
    # Read the YAML file into a dictionary
    # called `application_endpoints`.

    path = flask.request.path
    loadable_func = application_endpoints.get(path, None)
    if not loadable_func:
        # Handle non-managed endpoint and exit.

    # Import and load the file in `loadable_func` and
    # store the result in a variable called `the_package`.

    # Invoke `func` with the arguments that were
    # passed in, assuming that every imported file
    # must implement a function called `run()`

    results = the_package.run(flask.request.args)

    # Then return the results.

我猜测这样的事情可能会有效,但我想知道是否有更好的方法来做到这一点,也许使用 Flask 的其他功能,甚至使用 Flask-RESTful 或其他 Flask 衍生产品。

我们不想使用 Flask 或其衍生产品以外的任何东西。

要明确的是,目标是只有一个由配置文件驱动的单一修饰路由函数,而不是多个修饰路由函数,每个可能的端点 URL 一个。

相关内容