使用python中的版本实现Web API

时间:2013-03-18 23:17:25

标签: python api bottle

我正在使用python(3.x)和bottle实现一个简单的Web应用程序。由于我想要公开的API将来可能会发生变化,我想添加不同版本的可能性。

在这个主题上有一些富有洞察力的答案here,但除非对Web API进行版本控制是一个经过验证的坏主意,否则我还是想尝试一下。

关于我的应用:例如,版本1.0允许通过POST /resource进行以下调用:

@post('/resource')
post_item(name=item_name, value=item_value)

未来版本可能会这样做:

@post('/resource')
post_item(name=item_name, value=item_value, fullname=longer_item_name)

为简单起见,假设关键字参数'name','value','fullname'来自FROM数据字段:

<input name="name" type="text" />

现在,首先想到的是在开头插入一个version参数,类似于IP is doing及其标题:

post_item(v=1, name=item_name, value=item_value)
post_item(v=2, name=item_name, value=item_value, fullname=longer_item_name)

然而,它似乎有点麻烦。是否有任何网络微框架库可以帮助解决这个问题?我是否超出了 micro 框架的范围?

1 个答案:

答案 0 :(得分:5)

这绝对不是一个被证明是坏主意,更像是一种被证明是必需的。问题在于,对于处理它的最佳方式几乎没有达成一致(除了基于URI的方法的高级协议之外)。

Apigee在这里有一些关于API版本策略的好文章:

https://blog.apigee.com/taglist/versioning

这里有一个很好的概述流行的API如何处理版本控制,以及一些讨论版本控制策略的资源:

http://www.lexicalscope.com/blog/2012/03/12/how-are-rest-apis-versioned/