AWS Проверка запроса UUID шлюза API - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь проверить запросы, поступающие на шлюз API, с помощью валидатора запросов для проверки тела запроса. Ожидаемое тело JSON имеет только один ключ - userId, а значение должно быть UUID. Я настроил свою модель следующим образом:

{
  "$schema" : "http://json-schema.org/draft-04/schema#",
  "title" : "newUser",
  "type" : "object",
  "properties" : {
    "userId" : { 
        "type" : "string",
        "format" : "uuid"
    }
  }
}

После нескольких тестов кажется, что он работает, он принимает действительный UUID, и все они правильно возвращают неверный запрос:

{
    "userId": null
}

{
    "userId": "text"
}

{
    "userId": 123
}

{
    "userId": "8327a29c-7134-4566-8b58-"
}

{
    "userId": "8327a29c-7134-4566-8b58-46bcf951ef6az"
}

Однако, если вы удалите несколько символов или добавите пару действительных шестнадцатеричных символов, чтобы сделать его недопустимой длиной, он пройдет проверка и отправка по запросу. Каков правильный способ проверки UUID с помощью валидатора запросов в API-шлюзе, который действительно работает?

1 Ответ

0 голосов
/ 08 мая 2020

После дальнейшего изучения, uuid как формат явно не определен в спецификации OpenAPI. Поэтому реализация проверки формата не всегда совместима с каждой системой. Поэтому я думаю, что реализация валидатора AWS немного забавна.

Самым чистым решением, о котором я думал, является использование такого регулярного выражения:

{
  "$schema" : "http://json-schema.org/draft-04/schema#",
  "title" : "newUser",
  "type" : "object",
  "properties" : {
    "userId" : { 
        "type" : "string",
        "format" : "uuid",
        "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
    }
  }
}
...