2016-12-21 12 views
4

の配列であることを闊歩クエリのparamを許可し、私は次のことをサポートするために、クエリのparam station_idを許可する:swagger2(OPENAPI)を使用して、残りのAPIを構築するには、文字列または整数

  • station_id = 23(リターン?ステーション23)
  • ?station_id = 23,45(戻りステーション23及び45)
  • ?station_id = 3:14](戻りステーション14を通る3)
  • ?station_id = 100%(%sの行為としてワイルドカードは1001, 10049などのようなものを返す)
私は、これを達成するための試みとして、次の闊歩定義(文字列の配列)を使用

:この定義に

parameters: 
    - name: station_id 
    in: query 
    description: filter stations by station_id 
    required: false 
    type: array 
    items: 
     type: string 

闊歩検証をして失敗したとして、前の例のすべてがstation_id = 23を除いて動作しますか?次のメッセージ:?私はstation_id = '23' の検証パスのようなstation_idを引用している場合、私は正しい応答を得ること

{ 
    "message": "Validation errors", 
    "errors": [ 
    { 
     "code": "INVALID_REQUEST_PARAMETER", 
     "errors": [ 
     { 
      "code": "INVALID_TYPE", 
      "params": [ 
      "array", 
      "integer" 
      ], 
      "message": "Expected type array but found type integer", 
      "path": [], 
      "description": "filter stations by station_id" 
     } 
     ], 
     "in": "query", 
     "message": "Invalid parameter (station_id): Value failed JSON Schema validation", 
     "name": "station_id", 
     "path": [ 
     "paths", 
     "/stations", 
     "get", 
     "parameters", 
     "0" 
     ] 
    } 
    ] 
} 

ノート。しかし、私は本当に引用符を使用する必要はありません。ユニオンタイプのようなものはこれを解決するのに役立ちますが、私が知る限り、それらはサポートされていません。

私はまた、単一のidの大文字を扱うことができる別のエンドポイント/ステーション/ {id}を持っていますが、上記で指定した方法でフィルタリングしたい他の(非主キー)たとえば、station_latitudeです。

問題を回避するためのアイデア - 多分私はパターン(正規表現)を何とか使うことができますか?スワッガー定義に回避策がない場合は、バリデータを調整またはバイパスする方法がありますか?これはnodejsプロジェクトですswagger-nodeswagger-express-mwのバージョンを0.7.0にアップグレードしました。

答えて

0

station_idパラメータのタイプを数値または文字列にすることができるように、anyOfというキーワードがJSONスキーマで提供されるものと似ていると思います。これはswagger:https://github.com/OAI/OpenAPI-Specification/issues/57ではサポートされていません。

代わりに、sortByskip、およびlimitパラメータを追加して、型を統一することができます。たとえば、?sortBy=station_id&skip=10&limit=10はステーション10〜20だけを取得します。

+1

AnyOfはOpenAPI v3でサポートされます –

関連する問題