Я использую Редактор Swagger для создания сервера Python Flask, я следовал Connexion, но есть проблема:
Я определил следующий ответ в файле YAML swagger:
responses:
'200':
description: successful operation
schema:
type: object
required:
- firstname
- lastname
properties:
firstname:
type: string
lastname:
type: string
Я ожидал вернуть следующий ответ:
{
"firstname": "Jane",
"lastname" : "Doe"
}
Однако API базы данных возвращает гораздо больший набор данных, например:
user=db.get_user_info()
pprint.pprint(user)
{
"firstname" : "Jane",
"middlename": "foo",
"lastname" : "Doe",
"age" : "25",
"sex" : "male",
...
}
Чтобы вернуть ожидаемый ответ, у меня есть 2 решения, но ни одно из них не идеально:
Решение 1.
Вручную определите меньший набор данных, например:
user_response = {
"firstname" = user["firstname"],
"lastname" = user["lastname"]
}
return user_responose
Но очевидно, что для каждого ответа я должен жестко кодировать переменную_response, а это значит, что я должен поддерживать свойства ответа в двух местах (как в YAML, так и в коде).
Решение 2.
Модели генерируются swagger codegen, поэтому мне нужно получить доступ к моделям и попытаться получить свойства ответа, например, пользовательская модель, вероятно, определена следующим образом:
self.swagger_types = {
'firstname': str,
'lastname': str,
}
Это может быть легко, но на самом деле в свойствах ответа много $ref, а внутри $ref всегда есть $ref. Я не могу найти способ легко получить все свойства.
Итак, мой вопрос: какое решение является лучшим?
Большое спасибо!
user=db.get_user_info()
есть ли способ указать список полей (например, имя, фамилия), которые вам нужны? (Я не эксперт в Python, но мне кажется, что приличный ORM должен иметь такую функцию) - person William Cheng   schedule 30.01.2017