如何处理 Flask-Restplus 响应中的多个 'GET' 端点 class
How to handle multiple 'GET' endpoints in a Flask-Restplus response class
我刚开始学习 Flask,正在尝试创建一个简单的 API 处理数据处理后端(名为 ATExplorer)。
我首先创建了一个 'backend' 命名空间,即 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.')
我想要两个端点,版本,返回后端的版本,例如0.1 和 status,返回后端的状态,例如'stopped',或'running'
我创建了一个响应 class 和这样的路由:
@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'}
猜猜这是设计问题。这种情况下 'design' 更可取?
---- 编辑 -----
可以重写上面的代码,通过以下方式实现所需的最终(客户端)结果:
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 允许多个 class 具有相同的名称,根据 'route' 装饰器做不同的事情,即 class 名称是 不相关的。
上面的逻辑有没有'text-book'的表达方式?
我认为这更像是一个 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"})
我刚开始学习 Flask,正在尝试创建一个简单的 API 处理数据处理后端(名为 ATExplorer)。
我首先创建了一个 'backend' 命名空间,即 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.')
我想要两个端点,版本,返回后端的版本,例如0.1 和 status,返回后端的状态,例如'stopped',或'running'
我创建了一个响应 class 和这样的路由:
@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'}
猜猜这是设计问题。这种情况下 'design' 更可取?
---- 编辑 ----- 可以重写上面的代码,通过以下方式实现所需的最终(客户端)结果:
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 允许多个 class 具有相同的名称,根据 'route' 装饰器做不同的事情,即 class 名称是 不相关的。
上面的逻辑有没有'text-book'的表达方式?
我认为这更像是一个 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"})