2017-01-30 25 views
0

をトリミング応答は、私がConnexion文書に従っても問題があります: PythonのConnexionは - 私は、Pythonフラスコサーバーを生成するために<a href="http://editor.swagger.io/" rel="nofollow noreferrer">Swagger Editor</a>を使用してい

Iに定義闊歩の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つの場所で応答プロパティを維持する必要があります(YAMLとコードの両方がわかります)。

解決方法2:

モデルが闊歩するコード生成によって生成されたので、私はモデルにアクセスし、応答特性を取得しようとする必要があるが、例えば、ユーザモデルはおそらく、このように定義:

self.swagger_types = { 
    'firstname': str, 
    'lastname': str, 
} 

これは簡単ですが、実際には応答プロパティには多くの$ refがあり、$ ref内には常に$ refがあります。私はすべてのプロパティを簡単に取得する方法を見つけることができません。

だから私の質問は、最高の解決策は何ですか?

ありがとうございます!

+0

'user = db.get_user_info()'を実行するときに、必要なフィールド(firstname、lastnameなど)のリストを指定する方法はありますか? (私はPythonの専門家ではないが、まともなORMはそのような機能を持っている必要があります) –

+0

解決策1を使用しない限り、どのフィールドが返される必要があるかわかりませんYAMLのコンテンツと重複しています)、または解決策2を使用してください(生成されたモデルのフィールドを取得します。フィールド内の再帰参照のために非常に難しいと思われます)。 –

答えて

0

ここであなたが望むことができる方法は、接続には影響しません。あなたのハンドラのSwagger定義にアクセスし、返される必要があるフィールドを確認することができます。

JSONオブジェクトの参照を解除する方法についてhere how Connexion does thatが表示されます。

connexion.App#add_apiメソッド呼び出しでパラメータvalidate_responses=Trueを設定すると、Connexionはエンドポイントの応答を検証します。あなたのスキーマが仕様と一致しない場合でも、Connexionは実行時に例外をスローします。コードのテストを書くことを覚えておいてください。そうすれば、アプリを本番環境に導入する前にこの種のエラーが発生します。

+0

あなたの親切な返答をありがとう。また、スワッガーの定義に自分自身でアクセスしなければならないことに気付きました。 Connexionは既にそれを行っていたので、私はSwaggerの定義にアクセスしないようにしようとしていましたが、私はそれを2回行うべきではないと思っていました。しかし、応答スキーマを取得するためのオブジェクトが用意されていないようです。検証部分については、スキーマを検証するのに役立つことに気付きました。その部分がクールだからです。とにかく、もう一度あなたの説明をありがとう! –

関連する問題

 関連する問題