在使用swagger2(OpenAPI的)構建一個REST API的陣列,我想允許查詢參數station_id支持下列:允許招搖查詢參數是字符串或者整數
- station_id = 23(返回站23)
- ?station_id = 23,45(返回站23和45)
- ?station_id = [3:14](返回站3至14)
- ?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的所有的前述實施例工作的?以下消息:
{
"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"
]
}
]
}
請注意,如果我引用station_id像?station_id = '23'驗證通過,我會得到正確的響應。但我真的不想用引號。像聯合類型的東西可以幫助解決這個問題,但據我所知,它們不被支持。
我也有另一個endpoint/stations/{id}可以處理單個id的情況,但仍然有許多其他(非主鍵)數字字段,我想按照上面指定的方式進行過濾。例如station_latitude。
任何想法,以解決 - 也許我可以使用模式(正則表達式)莫名其妙嗎?如果在swagger定義中沒有解決方法,是否有一種方法可以調整或繞過驗證器?這是一個使用swagger-node的nodejs項目我已將版本swagger-express-mw升級到0.7.0。
AnyOf將在OpenAPI v3中受支持 –