Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление API
Политика validate-parameters проверяет параметры заголовка, запроса или пути в запросах на соответствие схеме API.
Внимание
Если API импортирован с помощью версии API управления до 2021-01-01-preview, политика validate-parameters может не действовать. Возможно, потребуется повторно импортировать API с помощью версии API управления 2021-01-01-preview или более поздней версии.
Примечание.
Максимальный размер схемы API, которую можно использовать этой политикой проверки, составляет 4 МБ. Если размер схемы превышает это ограничение, то политики проверки будут возвращать ошибки во время выполнения. Чтобы увеличить это ограничение, обратитесь в службу поддержки.
Примечание.
Задайте элементы политики и дочерние элементы в порядке, указанном в правиле политики. Чтобы помочь вам настроить эту политику, портал предоставляет интерактивный редактор на основе форм. Узнайте, как устанавливать или изменять политики службы управления API.
Правило политики
<validate-parameters specified-parameter-action="ignore | prevent | detect" unspecified-parameter-action="ignore | prevent | detect" errors-variable-name="variable name">
<headers specified-parameter-action="ignore | prevent | detect" unspecified-parameter-action="ignore | prevent | detect">
<parameter name="parameter name" action="ignore | prevent | detect" />
</headers>
<query specified-parameter-action="ignore | prevent | detect" unspecified-parameter-action="ignore | prevent | detect">
<parameter name="parameter name" action="ignore | prevent | detect" />
</query>
<path specified-parameter-action="ignore | prevent | detect">
<parameter name="parameter name" action="ignore | prevent | detect" />
</path>
</validate-parameters>
Атрибуты
| Атрибут | Описание | Обязательное поле | По умолчанию. |
|---|---|---|---|
| указанное действие -parameter-action |
Действие, выполняемое для параметров запроса, указанных в схеме API. Если указано в элементе headers, query или path, значение переопределяет значение specified-parameter-action в элементе validate-parameters. Допустимы выражения политики. |
Да | Н/П |
| unspecified-parameter-action |
Действие, выполняемое для параметров запроса, не указанных в схеме API. Если указано в элементе headers или query, значение переопределяет значение unspecified-parameter-action в элементе validate-parameters. Допустимы выражения политики. |
Да | Н/П |
| errors-variable-name | Имя переменной в context.Variables, где регистрируются ошибки проверки. Выражения политики не допускаются. |
нет | Н/П |
Элементы
| Имя | Описание | Обязательное поле |
|---|---|---|
| заголовки | Добавьте этот элемент и один или несколько parameter подэлементов, чтобы переопределить действия проверки по умолчанию для определенных именованных параметров в запросах. Если параметр указан в схеме API, это значение переопределяет конфигурацию specified-parameter-action более высокого уровня. Если параметр не указан в схеме API, это значение переопределяет конфигурацию unspecified-parameter-action более высокого уровня. |
нет |
| запрос | Добавьте этот элемент и один или несколько parameter подэлементов, чтобы переопределить действия проверки по умолчанию для определенных именованных параметров запроса в запросах. Если параметр указан в схеме API, это значение переопределяет конфигурацию specified-parameter-action более высокого уровня. Если параметр не указан в схеме API, это значение переопределяет конфигурацию unspecified-parameter-action более высокого уровня. |
нет |
| путь | Добавьте этот элемент и один или несколько parameter подэлементов, чтобы переопределить действия проверки по умолчанию для определенных параметров пути URL-адреса в запросах. Если параметр указан в схеме API, это значение переопределяет конфигурацию specified-parameter-action более высокого уровня. Если параметр не указан в схеме API, это значение переопределяет конфигурацию unspecified-parameter-action более высокого уровня. |
нет |
Действия
Политики проверки содержимого включают один или несколько атрибутов, которые указывают действие, которое Управление API принимает при проверке сущности в запросе API или ответе на схему API.
Действие может быть задано для элементов, представленных в схеме API, и для элементов, которые не представлены в схеме API, в зависимости от политики.
Действие, указанное в дочернем элементе политики, переопределяет действие, указанное для его родительского элемента.
Доступные действия
| Действие | Описание |
|---|---|
| игнорировать | Пропуск проверки. |
| предотвращать | Блокировка обработки запроса или ответа, регистрация подробных сведений об ошибке и возврат ошибки. Обработка прерывается при обнаружении первого набора ошибок. |
| обнаруживать | Регистрация ошибок проверки без прерывания обработки запроса или ответа. |
Использование
- Разделы политики: inbound.
- Области политики: глобальная, рабочая область, продукт, API, операция
- Шлюзы: классическая, версия 2, потребление, локальное размещение, рабочая область
Примечания об использовании
- Эту политику можно использовать только один раз в разделе политики.
Журналы
Сведения об ошибках проверки во время выполнения политики записываются в переменную в context.Variables, указанную в атрибуте errors-variable-name корневого элемента политики. Если так настроено действие prevent, ошибка проверки блокирует дальнейшую обработку запроса или ответа и также распространяется на свойство context.LastError.
Чтобы исследовать ошибки, используйте политику трассировки для регистрации ошибок из переменных контекста в Application Insights.
Влияние на производительность
Добавление политики проверки может повлиять на пропускную способность API. Предлагается руководствоваться общими принципами, описанными ниже.
- Чем больше размер схемы API, тем более низкой будет пропускная способность.
- Чем больше полезных данных в запросе или ответе, тем более низкой будет пропускная способность.
- На производительность больше влияет размер схемы API, чем объем полезных данных.
- При некоторых условиях проверка на соответствие схеме API, размер которой составляет несколько мегабайтов, может привести к превышению времени ожидания запроса или ответа. Этот эффект более выражен на уровнях службы Потребление и Разработчик.
Рекомендуем выполнять нагрузочные тесты с ожидаемыми рабочими нагрузками, чтобы оценить влияние политик проверки на пропускную способность API.
Пример
В этом примере все параметры запроса и пути проверяются в режиме предотвращения, а заголовки — в режиме обнаружения. Проверка переопределяется для нескольких параметров заголовка.
<validate-parameters specified-parameter-action="prevent" unspecified-parameter-action="prevent" errors-variable-name="requestParametersValidation">
<headers specified-parameter-action="detect" unspecified-parameter-action="detect">
<parameter name="Authorization" action="prevent" />
<parameter name="User-Agent" action="ignore" />
<parameter name="Host" action="ignore" />
<parameter name="Referrer" action="ignore" />
</headers>
</validate-parameters>
Ошибки проверки
Управление API создает ошибки проверки содержимого в следующем формате:
{
"Name": string,
"Type": string,
"ValidationRule": string,
"Details": string,
"Action": string
}
В таблице ниже перечислены все возможные ошибки политик проверки.
- Сведения — можно использовать для изучения ошибок. Не предназначено для общего доступа.
- Общедоступный ответ — ошибка, возвращенная клиенту. Не допускает утечки сведений о реализации.
Если политика проверки задает действие prevent и выдает ошибку, ответ от службы "Управление API"включает код состояния HTTP: 400, когда политика применяется в разделе входящего трафика, и 502, когда политика применяется в разделе исходящего трафика.
| Имя | Тип | Правило проверки | Сведения | Общедоступный ответ | Действие |
|---|---|---|---|---|---|
| validate-content | |||||
| ТелоЗапроса | SizeLimit | Длина текста запроса составляет {size} байт и превышает заданное ограничение в {maxSize} байт. | Длина текста запроса составляет {size} байт и превышает ограничение в {maxSize} байт. | обнаружение/предотвращение | |
| ResponseBody | SizeLimit | Длина текста ответа составляет {size} байт и превышает заданное ограничение в {maxSize} байт. | Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение | |
| {messageContentType} | ТелоЗапроса | Не определено | Неуказанный тип содержимого {messageContentType} не допускается. | Неуказанный тип содержимого {messageContentType} не допускается. | обнаружение/предотвращение |
| {messageContentType} | ResponseBody | Не определено | Неуказанный тип содержимого {messageContentType} не допускается. | Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение |
| Схема ApiSchema | Схема API не существует, или не может быть разрешена. | Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение | ||
| Схема ApiSchema | Схема API не задает определения. | Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение | ||
| {messageContentType} | RequestBody / ResponseBody | MissingDefinition | Схема API не содержит определение {definitionName}, связанное с типом содержимого {messageContentType}. | Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение |
| {messageContentType} | ТелоЗапроса | Неправильное значениеMessage | Текст запроса не соответствует определению {definitionName}, связанному с типом содержимого {messageContentType}. {valError.Message} Line: {valError.LineNumber}, позиция: {valError.LinePosition} |
Текст запроса не соответствует определению {definitionName}, связанному с типом содержимого {messageContentType}. {valError.Message} Line: {valError.LineNumber}, позиция: {valError.LinePosition} |
обнаружение/предотвращение |
| {messageContentType} | ResponseBody | Неправильное значениеMessage | Текст ответа не соответствует определению {definitionName}, связанному с типом содержимого {messageContentType}. {valError.Message} Line: {valError.LineNumber}, позиция: {valError.LinePosition} |
Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение |
| ТелоЗапроса | ValidationException | Не удается проверить текст запроса для типа содержимого {messageContentType}. {сведения об исключении} |
Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение | |
| ResponseBody | ValidationException | Не удается проверить текст ответа для типа содержимого {messageContentType}. {сведения об исключении} |
Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение | |
| validate-parameters / validate-headers | |||||
| {paramName} / {headerName} | QueryParameter / PathParameter / RequestHeader | Не определено | Неуказанный {path parameter / query parameter / header} {paramName} не допускается. | Неуказанный {path parameter / query parameter / header} {paramName} не допускается. | обнаружение/предотвращение |
| {headerName} | Заголовок ответа | Не определено | Неуказанный заголовок {headerName} не допускается. | Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение |
| Схема ApiSchema | Схема API не существует, или ее не удалось разрешить. | Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение | ||
| Схема ApiSchema | Схема API не задает определения. | Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение | ||
| {paramName} | QueryParameter / PathParameter / RequestHeader / ResponseHeader | MissingDefinition | Схема API не содержит определение {definitionName}, связанное с {query parameter / path parameter / header} {paramName}. | Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение |
| {paramName} | QueryParameter / PathParameter / RequestHeader | Неправильное значениеMessage | Запрос не может содержать несколько значений для {query parameter / path parameter / header} {paramName}. | Запрос не может содержать несколько значений для {query parameter / path parameter / header} {paramName}. | обнаружение/предотвращение |
| {headerName} | Заголовок ответа | Неправильное значениеMessage | Ответ не может содержать несколько значений для заголовка {headerName}. | Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение |
| {paramName} | QueryParameter / PathParameter / RequestHeader | Неправильное значениеMessage | Значение {query parameter / path parameter / header} {paramName} не соответствует определению. {valError.Message} Line: {valError.LineNumber}, позиция: {valError.LinePosition} |
Значение {query parameter / path parameter / header} {paramName} не соответствует определению. {valError.Message} Line: {valError.LineNumber}, позиция: {valError.LinePosition} |
обнаружение/предотвращение |
| {headerName} | Заголовок ответа | Неправильное значениеMessage | Значение заголовка {headerName} не соответствует определению. {valError.Message} Line: {valError.LineNumber}, позиция: {valError.LinePosition} |
Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение |
| {paramName} | QueryParameter / PathParameter / RequestHeader | Неправильное значениеMessage | Значение {query parameter / path parameter / header} {paramName} не может быть проанализировано в соответствии с определением. {ex. Сообщение} |
Значение {query parameter / path parameter / header} {paramName} не удалось проанализировать в соответствии с определением. {ex. Сообщение} |
обнаружение/предотвращение |
| {headerName} | Заголовок ответа | Неправильное значениеMessage | Значение заголовка {headerName} не удалось проанализировать в соответствии с определением. | Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение |
| {paramName} | QueryParameter / PathParameter / RequestHeader | Ошибка валидации | Не удается проверить {Query parameter / Path parameter / Header} {paramName}. {сведения об исключении} |
Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение |
| {headerName} | Заголовок ответа | Ошибка валидации | Не удается проверить заголовок {headerName}. {сведения об исключении} |
Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение |
| validate-status-code | |||||
| {status-code} | Код статуса | Не определено | Код состояния ответа {status-code} не допустим. | Не удалось обработать запрос из-за внутренней ошибки. Обратитесь к владельцу API. | обнаружение/предотвращение |
В следующей таблице перечислены все возможные значения причины ошибки проверки, а также возможные значения сообщений.
| Причина | Сообщение |
|---|---|
| Недопустимый запрос | {Details} для переменной контекста, {Public response} для клиента |
| Ответ не разрешен | {Details} для переменной контекста, {Public response} для клиента |
Связанные политики
Связанный контент
Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.
- Руководство. Преобразование и защита API
- Полный перечень операторов политик и их параметров см. в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- Репозиторий фрагментов политик
- репозиторий Policy
- Набор средств политики Управление API Azure
- Получите помощь Copilot для создания, объяснения и устранения неполадок в политике