Python Connexion - 响应微调
Python Connexion - Response Trimming
我正在使用 Swagger Editor to generate a Python Flask server, I followed the Connexion 文档,但出现问题:
我在 swagger YAML 文件中定义了以下响应:
responses:
'200':
description: successful operation
schema:
type: object
required:
- firstname
- lastname
properties:
firstname:
type: string
lastname:
type: string
我期望的是 return 以下响应:
{
"firstname": "Jane",
"lastname" : "Doe"
}
但是,数据库 API return 是一个更大的数据集,例如:
user=db.get_user_info()
pprint.pprint(user)
{
"firstname" : "Jane",
"middlename": "foo",
"lastname" : "Doe",
"age" : "25",
"sex" : "male",
...
}
为了return我预期的反应,我有2个解决方案,但都不是完美的:
解决方案一:
手动定义一个较小的数据集,例如:
user_response = {
"firstname" = user["firstname"],
"lastname" = user["lastname"]
}
return user_responose
但很明显,对于每个响应我都必须硬编码一个变量_response,这意味着我必须在 2 个地方维护响应属性(swagger YAML 和代码) .
方案二:
模型是由 swagger codegen 生成的,所以我必须访问模型并尝试获取响应属性,例如,用户模型可能是这样定义的:
self.swagger_types = {
'firstname': str,
'lastname': str,
}
这可能很简单,但实际上响应属性有很多 $ref,并且 $ref 中总是有 $ref。我找不到轻松获取所有属性的方法。
所以我的问题是,最好的解决方案是什么?
非常感谢!
Connexion 不会影响您如何在这里做您想做的事。您可以做的是在您的处理程序中访问您的 Swagger 定义,然后检查需要返回哪些字段。
关于如何取消引用 JSON 对象。可以看到here how Connexion does that.
如果您在 connexion.App#add_api
方法调用中设置参数 validate_responses=True
,Connexion 将验证端点的响应。因此,如果您的模式与规范不匹配,请不要担心,Connexion 会在运行时抛出异常。请记住为您的代码编写测试,这样您将在将您的应用程序部署到生产环境之前遇到此类错误。
我正在使用 Swagger Editor to generate a Python Flask server, I followed the Connexion 文档,但出现问题:
我在 swagger YAML 文件中定义了以下响应:
responses:
'200':
description: successful operation
schema:
type: object
required:
- firstname
- lastname
properties:
firstname:
type: string
lastname:
type: string
我期望的是 return 以下响应:
{
"firstname": "Jane",
"lastname" : "Doe"
}
但是,数据库 API return 是一个更大的数据集,例如:
user=db.get_user_info()
pprint.pprint(user)
{
"firstname" : "Jane",
"middlename": "foo",
"lastname" : "Doe",
"age" : "25",
"sex" : "male",
...
}
为了return我预期的反应,我有2个解决方案,但都不是完美的:
解决方案一:
手动定义一个较小的数据集,例如:
user_response = {
"firstname" = user["firstname"],
"lastname" = user["lastname"]
}
return user_responose
但很明显,对于每个响应我都必须硬编码一个变量_response,这意味着我必须在 2 个地方维护响应属性(swagger YAML 和代码) .
方案二:
模型是由 swagger codegen 生成的,所以我必须访问模型并尝试获取响应属性,例如,用户模型可能是这样定义的:
self.swagger_types = {
'firstname': str,
'lastname': str,
}
这可能很简单,但实际上响应属性有很多 $ref,并且 $ref 中总是有 $ref。我找不到轻松获取所有属性的方法。
所以我的问题是,最好的解决方案是什么?
非常感谢!
Connexion 不会影响您如何在这里做您想做的事。您可以做的是在您的处理程序中访问您的 Swagger 定义,然后检查需要返回哪些字段。
关于如何取消引用 JSON 对象。可以看到here how Connexion does that.
如果您在 connexion.App#add_api
方法调用中设置参数 validate_responses=True
,Connexion 将验证端点的响应。因此,如果您的模式与规范不匹配,请不要担心,Connexion 会在运行时抛出异常。请记住为您的代码编写测试,这样您将在将您的应用程序部署到生产环境之前遇到此类错误。