我使用Swagger Editor生成一個Python瓶服務器,我跟着Connexion文檔,但有一個問題:Python的聯接 - 響應修剪
我定義在招搖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,這意味着我必須在2個地方維護響應屬性(包括Swagger YAML和代碼)。
解決方案2:
模型是由招搖的代碼生成生成的,所以我必須要訪問模型,並得到了響應性能,例如,用戶模型可能這樣定義的:
self.swagger_types = {
'firstname': str,
'lastname': str,
}
這可能很容易,但實際上響應屬性有很多$ ref,並且$ ref內部總是有$ ref。我無法輕鬆找到所有屬性的方法。
所以我的問題是,什麼是最好的解決方案?
非常感謝!
當執行'user = db.get_user_info()'時,有沒有辦法指定你需要的字段列表(例如名字,姓氏)? (我不是Python的專家,但在我看來一個體面的ORM應該有這樣的功能) –
這是可能的,問題是,我不知道什麼領域需要返回,除非我使用解決方案1(硬編碼字段I需要與YAGL中的內容重複),或者使用解決方案2(從生成的模型中獲取字段,由於域中的遞歸引用,這看起來非常困難) –