gpt4 book ai didi

python - 如何处理 Flask-Restplus 响应类中的多个 'GET' 端点

转载 作者:行者123 更新时间:2023-11-28 17:59:29 29 4
gpt4 key购买 nike

我刚刚开始学习 Flask 并尝试创建一个处理数据处理后端的简单 API(名为 ATExplorer)。

我首先创建了一个“后端”命名空间,即 backendAPI:

from flask import Flask, Blueprint, redirect, url_for
from flask_restplus import Resource, Api
from werkzeug.routing import Rule

app = Flask(__name__)
app.config.SWAGGER_UI_DOC_EXPANSION = 'list'
blueprint = Blueprint('api', __name__, url_prefix='/api')
api = Api(blueprint, version=0.1, title='AT Pipeline API', doc='/swagger/')
app.register_blueprint(blueprint)
backendAPI = api.namespace('backend', description='Manage ATExplorer backend API.')

我想要两个端点,version,返回后端的版本,例如0.1 和 status,返回后端的状态,例如“停止”或“运行”

我创建了一个响应类和这样的路由:

@backendAPI.route('/version', methods=['GET'])
@backendAPI.route('/status', methods=['GET'])

class Backend(Resource):

def get(self):
#How to differentiate between the ../backend/version call and a
# ../backend/status call here??
#if call is for status:
# return {'status': 'running'}
#elif call is for version
# return {'version': '0.1'}

我猜这是一个设计问题。对于这种情况,哪种“设计”更可取?

----- 编辑 -----可以重写上面的代码,通过以下方式实现所需的最终(客户端)结果:

class Backend(Resource):
def __init__(self, api=None, *args, **kwargs):
#The 'actual' backend resource
self.backend = atp.backend

@backend_api.route('/status', methods=['GET'])
class Dummy(Backend):
def get(self):
return {'status':self.backend.getStatus()}

@backend_api.route('/version', methods=['GET'])
class Dummy(Backend):
def get(self):
return {'status':self.backend.getVersion()}

似乎 flask 允许多个具有相同名称的类,根据“路由”装饰器做不同的事情,即类名是不相关的

是否有一种“教科书”的方式来表达上述逻辑?

最佳答案

我认为这更像是一个 flask_restplus 问题,因为在 Flask 中您通常使用方法作为路由。

无论如何,您是否考虑过为两个不同的操作使用两个不同的类?

@backendAPI.route('/version', methods=['GET'])
class Version(Resource):
def get(self):
return flask.jsonify({"version_number": "0.1"})

@backendAPI.route('/status', methods=['GET'])
class Status(Resource):
def get(self):
return flask.jsonify({"status": "running"})

关于python - 如何处理 Flask-Restplus 响应类中的多个 'GET' 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56452453/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com