PythonFlask调用不同版本的API

2024-09-30 03:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python Flask的新手,在API设计的版本控制方面遇到了一个问题。考虑对用户API执行GET方法的URL。在

v1 - <URL>/api/v1/users?q=getUserInfo?name=ryan
v2 - <URL>/api/v2/users?q=getUserInfo?name=ryan&gender=male

虽然v1和v2中的“user”API在开发期间可能有不同的实现,但是客户端会针对不同的请求调用不同版本的API,API根据API调用的不同响应也不同。当用户调用不同的API时,我应该如何将客户端路由到相应的API版本?在

这是我的服务器.py公司名称:

^{pr2}$

在我的api/v1中/用户.py在

def getUserInfo(name):
    # some logic and return user info

在我的api/v2中/用户.py在

def getUserInfo(name, gender):
    # some logic and return user info

基本思想是服务器.py根据客户端的请求和对客户端的响应,充当到不同版本API的中心路由。在

另外,不同版本的API包含多个模块化设计的.py文件,例如:<version>/product.pyAPI处理产品请求,<version>/cart.pyAPI处理cart请求等

所以问题是,我应该如何调用不同版本的API文件并将响应返回给客户机?在


Tags: 用户namepy版本apiurl客户端gender
1条回答
网友
1楼 · 发布于 2024-09-30 03:22:47

注意,并非必须对所有资源进行版本控制。
当我们在单个服务器节点(或微服务)中支持不同版本的端点时,我们通常称它们为“共存端点”
如果决定将API版本作为动态请求参数传递<version>,则必须实现一个自定义调度程序,以便为每个版本加载/应用不同的处理程序。
支持共存端点的一种更简单的方法是为每个版本注册不同的路由。
虽然Sanic服务器允许将version关键字传递给路由装饰器或蓝图初始值设定项,但在Flask中,您可以应用简单的blueprints

...
# import <needed_features> from api/v1/user.py
# import <needed_features> from api/v2/user.py
...

bp_api_v1 = Blueprint('api_v1', __name__, url_prefix='/api/v1')
bp_api_v2 = Blueprint('api_v2', __name__, url_prefix='/api/v2')

app.register_blueprint(bp_api_v1)
app.register_blueprint(bp_api_v2)

@bp_api_v1.route('/users/<action>')
def api(request, action):
    # call getUserInfo from api/v1/user.py
    user_info = getUserInfo(request.args.get('name'))
    return json.dumps(user_info)    


@bp_api_v2.route('/users/<action>')
def api(request, action):
    # call getUserInfo from api/v2/user.py
    user_info = getUserInfo(request.args.get('name'))
    return json.dumps(user_info)    

相关问题 更多 >

    热门问题