Я только начинаю изучать Flask и пытаюсь создать простой API, работающий с серверной частью обработки данных (называется ATEExplorer).
Я начал с создания пространства имен «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, возвращая статус серверной части, например. «остановлен» или «работает»
Я создал класс ответа и такие маршруты:
@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-restplus
сообразителен, но я уверен, что имя класса имеет значение для удобочитаемости, не более того. - person AdamGold   schedule 06.06.2019