在Python中实现带版本的Web API

1 投票
1 回答
2112 浏览
提问于 2025-04-17 19:34

我正在用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/

撰写回答