【发布时间】:2017-01-30 06:18:20
【问题描述】:
我正在使用Swagger Editor 生成Python Flask 服务器,我按照Connexion 文档但是有一个问题:
我在 swagger YAML 文件中定义了以下响应:
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 应该有这样的功能) -
有可能,问题是,我不知道需要返回哪些字段,除非我使用解决方案1(硬编码我需要的字段,与swagger YAML中的内容重复),或使用解决方案2(从生成的模型中获取字段,由于字段中的递归引用,这似乎非常困难)
标签: python flask swagger swagger-codegen connexion