在Python中实现带版本的Web API
我正在用Python(3.x)和Bottle框架实现一个简单的网页应用。因为我想要公开的API可能将来会有变化,所以我想添加不同版本的功能。
关于这个话题,有一些很有见地的回答,在这里可以找到。不过,除非说为网页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'来自表单数据字段:
<input name="name" type="text" />
现在,首先想到的是在开头插入一个version
参数,类似于IP协议在其头部所做的那样:
post_item(v=1, name=item_name, value=item_value)
post_item(v=2, name=item_name, value=item_value, fullname=longer_item_name)
不过,这样似乎有点麻烦。有没有什么网页微框架库可以帮助处理这个问题?我这样做是不是超出了微框架的范围?
1 个回答
6
这其实不是一个被证明是坏主意的事情,更像是一个被证明是必要的事情。问题在于,大家对处理这个问题的最佳方法几乎没有一致的看法(除了在高层次上大家都同意使用基于URI的方法)。
Apigee有一些关于API版本管理策略的不错文章,可以在这里查看:
https://blog.apigee.com/taglist/versioning
这里有一个关于流行API如何处理版本管理的好概述,还有一些讨论版本管理策略的资源:
http://www.lexicalscope.com/blog/2012/03/12/how-are-rest-apis-versioned/