У меня есть:
- библиотека, которая делает [материал]
- определение API swagger, которое примерно равно # 1 с незначительными отличиями, чтобы четко отобразить службу REST
- приложение с флягой, созданное с использованием Swagger-Codegen, например, приводит к функциям контроллера python примерно один к одному С# 1.
Мое намерение заключается в том, что приложение флеши (весь сгенерированный код) должно обрабатывать отображение только фактического REST api и синтаксического анализа параметров для соответствия спецификации API, закодированной в swagger. После любого синтаксического анализа параметров (опять же, сгенерированного кода) он должен обращаться непосредственно к моему (не созданному) бэкэнду.
Мой вопрос в том, как лучше всего подключить их с помощью ручного редактирования созданного кода python/flask? (Обратная связь по моему дизайну или детали формального шаблона дизайна, который это сделает, тоже будет отличным, я новичок в этом пространстве).
Свежий от генератора, я получаю функции python, такие как:
def create_task(myTaskDefinition):
"""
comment as specified in swagger.json
:param myTaskDefinition: json blah blah blah
:type myTaskDefinition: dict | bytes
:rtype: ApiResponse
"""
if connexion.request.is_json:
myTaskDefinition = MyTaskTypeFromSwagger.from_dict(connexion.request.get_json())
return 'do some magic!' # swagger codegen inserts this string :)
На бэкэнд у меня есть моя фактическая логика:
def create_task_backend(myTaskDefinition):
# hand-coded, checked into git: do all the things
return APIResponse(...)
Каков правильный способ получить create_task()
для вызова create_task_backend()
?
Конечно, если я вношу изменения в мою спецификацию swagger, мне придется вручную обновлять незагенерированный код; однако есть много причин, по которым я могу повторно сгенерировать свой API (скажем, добавить/уточнить класс MyTaskTypeFromSwagger
или пропустить проверку на git сгенерированный код вообще), и если мне нужно вручную отредактировать созданный API кода, то все эти изменения удаляются с каждым воссозданием.
Конечно, я мог бы script с помощью простой грамматики, например. Pyparsing; но пока это мой первый раз с этой проблемой, кажется, что она уже широко решена!