Проверка нескольких вхождений параметров запроса с использованием JSON-схемы и AJV
Я хочу проверить несколько вхождений одного и того же параметра запроса с помощью AJV.
Моя схема OpenApi выглядит примерно так:
...
/contacts:
get:
parameters:
- name: user_id
in: query
schema:
type: integer
...
Я преобразую его в действительную схему JSON, чтобы иметь возможность проверить его с помощью AJV:
{
query: {
properties: {
user_id: { type: 'integer' }
}
}
}
Естественно, проверка AJV отлично работает для одного параметра типа integer.
Я хочу, чтобы иметь возможность проверить несколько случаев user_id
, Например: /contacts?user_id=1&user_id=2
преобразуется в { user_id: [1, 2] }
и я хочу, чтобы это действительно было действительно.
На этом этапе проверка завершается неудачно, поскольку она ожидает целое число, но получила массив. Есть ли способ проверить каждый элемент массива независимо?
Спасибо
1 ответ
Возможно, схема для user_id
следует использовать составные ключевые слова anyOf, позволяющие определить несколько схем для одного свойства:
var ajv = new Ajv({
allErrors: true
});
var schema = {
"properties": {
"user_id": {
"anyOf": [{
"type": "integer"
},
{
"type": "array",
"items": {
"type": "integer"
}
},
]
},
}
};
var validate = ajv.compile(schema);
function test(data) {
var valid = validate(data);
if (valid) console.log('Valid!');
else console.log('Invalid: ' + ajv.errorsText(validate.errors));
}
test({
"user_id": 1
});
test({
"user_id": "foo"
});
test({
"user_id": [1, 2]
});
test({
"user_id": [1, "foo"]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/ajv/6.5.5/ajv.min.js"></script>