7

我正在 Python Flask 中创建一个 REST API,并且想知道创建引用特定 git 标记的可版本化 API 的选项有哪些。

我想要做的是指定 API 的版本,例如http://myapiserver.com/flaskapp/query/listcontent?version=1.1

然后将版本链接返回到我在 git 中标记为 v1.1 的代码。

有哪些选项以及管理此问题的最佳方法是什么?

4

1 回答 1

8

我可以想到两种支持版本化 API 的方法,但都不会像您在问题中建议的那样让应用程序弄乱自己的 git 存储库。

例如,假设您有两个版本的 API,v1.0 和 v1.1。

直接的方法是将两个版本安装在不同的目录上运行,每个版本都在不同的 localhost 端口或 unix 套接字上侦听。这两个版本上的路由不需要嵌入版本,例如,两者都可以有一个/users端点。将一切联系在一起的是一个反向代理(如 nginx),它将这两个 API 与使用版本控制的外部 URL 公开,映射/v1.0/users到 v1.0 服务器和/v1.1/usersv1.1 服务器。

另一种选择是让您的 v1.1 服务器同时响应 v1.1 端点和 v1.0 端点。在这种情况下,服务器将具有路由中的版本,因此 v1.1 服务器将同时具有 a/v1.0/users/v1.1/users. 起初这似乎很复杂,因为每个新的 API 版本都必须支持所有旧版本,但它也可以被视为一种优化,因为对于不改变或版本之间差异很小的 API 端点,你可以使用相同的代码处理它们:

@app.route('/<version>/users')
def users(version):
    # do something
    return jsonify(response)
于 2013-09-30T19:22:04.230 回答