【问题标题】:What is the best way to run REST API versions with Python Flask [closed]使用 Python Flask 运行 REST API 版本的最佳方法是什么 [关闭]
【发布时间】:2013-10-05 18:45:54
【问题描述】:

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

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

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

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

【问题讨论】:

标签: python git rest flask


【解决方案1】:

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

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

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

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

@app.route('/<version>/users')
def users(version):
    # do something
    return jsonify(response)

【讨论】:

  • 谢谢我喜欢第一个中的直接方式,因为通过引用 git 我只是要检查带有特定标签的目录到目录。与使用查询字符串相比,将版本放在路径开头似乎确实更适合服务器部署,尽管我也在研究重写规则以支持这一点。
猜你喜欢
  • 2018-11-23
  • 2017-07-30
  • 2019-10-21
  • 2011-10-12
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
相关资源
最近更新 更多