Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Правила OASValidation
Правило OASValidation (проверка спецификации OpenAPI) позволяет проверить входящий запрос или ответ на соответствие спецификации OpenAPI 3.0 (JSON или YAML). Подробнее о том, какой контент проверяется…
Правило OASValidation определяет название спецификации OpenAPI, которая будет использоваться для проверки при выполнении шага, к которому прикреплено правило.
Спецификация OpenAPI хранится как ресурс в следующем стандартном местоположении в пакете прокси-сервера API: apiproxy/resources/oas.
Спецификация OpenAPI должна содержать расширения .json, .yml и .yaml.
Добавьте спецификацию OpenAPI в качестве ресурса в пакет прокси-сервера API с помощью интерфейса или API, как описано в разделе Управление ресурсами.
Какой контент проверяется?
В таблице ниже приведены сообщения запроса, которые проверяются правилом OASValidation, по компонентам.
| Компоненты | Запросить проверку |
|---|---|
| Basepath | Проверяет базовый путь, определенный прокси-сервером API, и игнорирует базовый путь, указанный в спецификации OpenAPI. |
| Путь | Проверяет, соответствует ли путь запроса (без базового пути) одному из шаблонов пути, определенных в спецификации OpenAPI. |
| Глагол | Проверяет, определен ли глагол для пути в спецификации OpenAPI. |
| Тело запроса |
Примечание. Правила проверяют тело запроса на соответствие спецификации OpenAPI, только если для параметра Content-Type задано значение |
| Параметры |
|
В таблице ниже приведена сводная информация о содержимом ответного сообщения, которое проверяется правилом OASValidation, по компонентам.
| Компоненты | Проверка ответов |
|---|---|
| Путь | Проверяет, соответствует ли путь запроса (без базового пути) одному из шаблонов пути, определенных в спецификации OpenAPI. |
| Глагол | Проверяет, определен ли глагол для пути в спецификации OpenAPI. |
| Тело ответного сообщения |
|
Примеры
В примерах ниже показано, как использовать правило OASValidation для проверки сообщений на соответствие спецификации OpenAPI 3.0.
Как проверить сообщение с запросом
В примере ниже правила myoaspolicy проверяют тело запроса на соответствие схеме тела запроса операции, определенной в спецификации OpenAPI my-spec.json.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.json</OASResource>
<Options>
<ValidateMessageBody>true</ValidateMessageBody>
</Options>
<Source>request</Source>
</OASValidation>
Если текст сообщения не соответствует спецификации OpenAPI, возвращается ошибка policies.oasvalidation.Failed.
Проверка параметров
В примере ниже показано, как настроить правило, чтобы оно не выполнялось, если в запросе указан параметр заголовка, запроса или файла cookie, не определенный в спецификации OpenAPI.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Header>false</Header>
<Query>false</Query>
<Cookie>false</Cookie>
</AllowUnspecifiedParameters>
</Options>
</OASValidation>Элемент <OASValidation>
Определяет правило проверки спецификации OpenAPI.
| Значение по умолчанию | Вкладка Правила по умолчанию приведена ниже. |
| Обязательно? | Обязательно |
| Тип | Сложный объект |
| Родительский элемент | – |
| Дочерние элементы |
<DisplayName><OASResource><Source><Options><Source> |
Синтаксис
Элемент <OASValidation> имеет следующий синтаксис:
<OASValidation
continueOnError="[true|false]"
enabled="[true|false]"
name="policy_name"
>
<!-- All OASValidation child elements are optional except OASResource -->
<DisplayName>policy_display_name</DisplayName>
<OASResource>validation_JSON_or_YAML</OASResource>
<Options>
<ValidateMessageBody>[true|false]</ValidateMessageBody>
<AllowUnspecifiedParameters>
<Header>[true|false]</Header>
<Query>[true|false]</Query>
<Cookie>[true|false]</Cookie>
</AllowUnspecifiedParameters>
</Options>
<Source>message_to_validate</Source>
</OASValidation>Правило по умолчанию
В следующем примере показаны настройки по умолчанию, которые задаются при добавлении правила проверки OAS в поток в интерфейсе Apigee:
<OASValidation continueOnError="false" enabled="true" name="OpenAPI-Spec-Validation-1">
<DisplayName>OpenAPI Spec Validation-1</DisplayName>
<Properties/>
<Source>request</Source>
<OASResource>oas://OpenAPI-Spec-Validation-1.yaml</OASResource>
</OASValidation>Этот элемент имеет следующие атрибуты, общие для всех политик:
| Атрибут | По умолчанию | Необходимый? | Описание |
|---|---|---|---|
name | Н/Д | Необходимый | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент |
continueOnError | ЛОЖЬ | Необязательный | Установите значение «false», чтобы возвращать ошибку при сбое политики. Это ожидаемое поведение для большинства политик. Установите значение «true», чтобы выполнение потока продолжалось даже после сбоя политики. |
enabled | истинный | Необязательный | Установите значение «true», чтобы применить политику. Установите значение «false», чтобы «отключить» политику. Политика не будет применяться, даже если она остается присоединенной к потоку. |
async | ЛОЖЬ | Устаревший | Этот атрибут устарел. |
Ссылка на дочерний элемент
В этом разделе описаны дочерние элементы <OASValidation>.
<DisplayName>
Используйте этот атрибут в дополнение к атрибуту name, чтобы присвоить правилу в редакторе прокси-сервера интерфейса управления другое, более понятное название.
Элемент <DisplayName> используется во всех правилах.
| Значение по умолчанию | – |
| Обязательно? | Необязательное поле. Если вы не укажете <DisplayName>, будет использовано значение атрибута name правила. |
| Тип | Строка |
| Родительский элемент | <PolicyElement> |
| Дочерние элементы | Нет |
Элемент <DisplayName> имеет следующий синтаксис:
Синтаксис
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Пример
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
У элемента <DisplayName> нет атрибутов или дочерних элементов.
<OASResource>
Указывает спецификацию OpenAPI, по которой будет выполняться проверка. Вы можете сохранить этот файл:
- В области прокси API в разделе
/apiproxy/resources/oasв пакете прокси API - В разделе
Resourcesредактора прокси-сервера API в представлении навигатора.
Подробнее о том, как управлять ресурсами…
Вы можете указать спецификацию OpenAPI, используя шаблон сообщения, например {oas.resource.url}.
В этом случае значение переменной потока oas.resource.url (в фигурных скобках) будет вычислено и подставлено в строку полезной нагрузки во время выполнения.
Подробнее о шаблонах сообщений…
| Значение по умолчанию | Нет |
| Обязательно? | Обязательно |
| Тип | Строка |
| Родительский элемент |
<OASValidation>
|
| Дочерние элементы | Нет |
Синтаксис
Элемент <OASResource> имеет следующий синтаксис:
<OASValidation name="policy_name"> <OASResource>oas://specname[.json|.yaml|.yml]</OASResource> ... </OASValidation>
Пример
В приведенном ниже примере используется спецификация my-spec.yaml, которая хранится в пакете прокси-сервера API в каталоге /apiproxy/resources/oas:
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> </OASValidation>
У элемента <OASResource> нет атрибутов или дочерних элементов.
<Options>
Настраивает параметры правила.
| Значение по умолчанию | – |
| Обязательно? | Необязательно |
| Тип | Сложный тип |
| Родительский элемент |
<OASValidation>
|
| Дочерние элементы |
<ValidateMessageBody><AllowUnspecifiedParameters> |
Синтаксис
Элемент <Options> имеет следующий синтаксис:
<OASValidation name="policy_name">
<OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
<Options>
<ValidateMessageBody>[true|false]</ValidateMessageBody>
<AllowUnspecifiedParameters>
<Header>[true|false]</Header>
<Query>[true|false]</Query>
<Cookie>[true|false]</Cookie>
</AllowUnspecifiedParameters>
</Options>
...
</OASValidation>Пример
В приведенном ниже примере настраиваются параметры правила. Ниже приведено подробное описание каждого варианта.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<ValidateMessageBody>false</ValidateMessageBody>
<AllowUnspecifiedParameters>
<Header>false</Header>
<Query>false</Query>
<Cookie>false</Cookie>
</AllowUnspecifiedParameters>
</Options>
</OASValidation><ValidateMessageBody>
Указывает, следует ли проверять тело письма на соответствие схеме тела запроса операции в спецификации OpenAPI. Установите значение true, чтобы проверить содержимое тела письма. Установите значение false, чтобы проверять только наличие текста письма.
Вы можете указать, следует ли продолжать выполнение потока после ошибки проверки, задав для атрибута continueOnError элемента <OASValidation> значение true.
| Значение по умолчанию | false |
| Обязательно? | Необязательно |
| Тип | Логическое значение |
| Родительский элемент |
<Options>
|
| Дочерние элементы | Нет |
Синтаксис
Элемент <ValidateMessageBody> имеет следующий синтаксис:
<OASValidation name="policy_name">
<OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
<Options>
<ValidateMessageBody>[true|false]</ValidateMessageBody>
</Options>
...
</OASValidation>Пример
В следующем примере показано, как включить проверку содержимого тела сообщения:
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<ValidateMessageBody>true</ValidateMessageBody>
</Options>
</OASValidation><AllowUnspecifiedParameters>
Настраивает поведение правила, если в запросе есть параметры заголовка, запроса или файла cookie, которые не определены в спецификации OpenAPI.
| Значение по умолчанию | – |
| Обязательно? | Необязательно |
| Тип | Сложный тип |
| Родительский элемент |
<Options>
|
| Дочерние элементы |
<Header><Query><Cookie> |
Синтаксис
Элемент <AllowUnspecifiedParameters> имеет следующий синтаксис:
<OASValidation name="policy_name">
<OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Header>[true|false]</Header>
<Query>[true|false]</Query>
<Cookie>[true|false]</Cookie>
</AllowUnspecifiedParameters>
</Options>
...
</OASValidation>Пример
В примере ниже показано, как настроить правило, чтобы оно не выполнялось, если в запросе указан параметр заголовка, запроса или файла cookie, не определенный в спецификации OpenAPI.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Header>false</Header>
<Query>false</Query>
<Cookie>false</Cookie>
</AllowUnspecifiedParameters>
</Options>
</OASValidation><Header> (дочерний элемент <AllowUnspecifiedParameters>)
Настраивает поведение правила, если в запросе есть параметры заголовка, не определенные в спецификации OpenAPI.
Чтобы разрешить указывать в запросе параметры заголовка, не определенные в спецификации OpenAPI, задайте для этого параметра значение true. В противном случае задайте для этого параметра значение false, чтобы выполнение правила завершилось неудачно.
| Значение по умолчанию | true |
| Обязательно? | Логическое значение |
| Тип | Сложный тип |
| Родительский элемент |
<AllowUnspecifiedParameters>
|
| Дочерние элементы | Нет |
Синтаксис
Элемент <Header> имеет следующий синтаксис:
<OASValidation name="policy_name">
<OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Header>[true|false]</Header>
</AllowUnspecifiedParameters>
</Options>
...
</OASValidation>Пример
В следующем примере показано, как настроить правило, чтобы оно не выполнялось, если в запросе указан параметр заголовка, не определенный в спецификации OpenAPI.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Header>false</Header>
</AllowUnspecifiedParameters>
</Options>
</OASValidation><Query> (дочерний элемент <AllowUnspecifiedParameters>)
Настраивает поведение правила, если в запросе есть параметры запроса, не определенные в спецификации OpenAPI.
Чтобы разрешить указывать в запросе параметры запроса, не определенные в спецификации OpenAPI, задайте для этого параметра значение true. В противном случае задайте для этого параметра значение false, чтобы выполнение правила завершилось неудачно.
| Значение по умолчанию | true |
| Обязательно? | Логическое значение |
| Тип | Сложный тип |
| Родительский элемент |
<AllowUnspecifiedParameters>
|
| Дочерние элементы | Нет |
Синтаксис
Элемент <Query> имеет следующий синтаксис:
<OASValidation name="policy_name">
<OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Query>[true|false]</Query>
</AllowUnspecifiedParameters>
</Options>
...
</OASValidation>Пример
В следующем примере показано, как настроить правило, чтобы оно не выполнялось, если в запросе указан параметр, не определенный в спецификации OpenAPI.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Query>false</Query>
</AllowUnspecifiedParameters>
</Options>
</OASValidation>Настраивает поведение правила, если в запросе есть параметры файлов cookie, не определенные в спецификации OpenAPI.
Чтобы разрешить указывать в запросе параметры файлов cookie, не определенные в спецификации OpenAPI, задайте для этого параметра значение true. В противном случае задайте для этого параметра значение false, чтобы выполнение правила завершилось неудачно.
| Значение по умолчанию | true |
| Обязательно? | Логическое значение |
| Тип | Сложный тип |
| Родительский элемент |
<AllowUnspecifiedParameters>
|
| Дочерние элементы | Нет |
Синтаксис
Элемент <Cookie> имеет следующий синтаксис:
<OASValidation name="policy_name">
<OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Query>[true|false]</Query>
</AllowUnspecifiedParameters>
</Options>
...
</OASValidation>Пример
В следующем примере показано, как настроить правило, чтобы оно не выполнялось, если в запросе указан параметр, не определенный в спецификации OpenAPI.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Cookie>false</Cookie>
</AllowUnspecifiedParameters>
</Options>
</OASValidation><Source>
Сообщение JSON, которое будет проверено на наличие атак с использованием полезной нагрузки JSON. Чаще всего используется значение request, поскольку обычно необходимо оценивать входящие запросы от клиентских приложений.
Чтобы оценивать сообщения с ответами, задайте значение response.
Установите значение message, чтобы автоматически оценивать сообщение запроса, когда правило прикреплено к потоку запроса, и сообщение ответа, когда правило прикреплено к потоку ответа.
| Значение по умолчанию | запрос |
| Обязательно? | Необязательно |
| Тип | Строка |
| Родительский элемент |
<Source>
|
| Дочерние элементы | Нет |
Синтаксис
Элемент <Source> имеет следующий синтаксис:
<OASValidation name="policy_name"> <OASResource>oas://specname[.json|.yaml|.yml]</OASResource> <Source>[message|request|response]</Source> ... </OASValidation>
Пример
В следующем примере запрос автоматически оценивается, когда правило прикреплено к потоку запроса, а ответ – когда правило прикреплено к потоку ответа:
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Source>message</Source> </OASValidation>
У элемента <Source> нет атрибутов или дочерних элементов.
Схемы
Каждый тип правил определяется схемой XML (.xsd). Схемы правил доступны на GitHub.
Коды ошибок
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые задаются Edge, когда это правило вызывает ошибку. Эта информация важна, если вы разрабатываете правила обработки ошибок. Подробнее о том, что нужно знать об ошибках в правилах и об обработке ошибок…
Ошибки времени выполнения
Эти ошибки могут возникать при выполнении правил.
| Код ошибки | Статус HTTP | Причина | |
|---|---|---|---|
steps.oasvalidation.Failed |
500 | Тело запроса не может быть проверено на соответствие спецификации OpenAPI. | |
steps.oasvalidation.SourceMessageNotAvailable |
500 |
Переменная, указанная в элементе |
|
steps.oasvalidation.NotMessageVariable |
500 |
Для элемента |
build |
Ошибки развертывания
Эти ошибки могут возникать при развертывании прокси-сервера, содержащего это правило.
| Название ошибки | Причина | |
|---|---|---|
ResourceDoesNotExist |
Спецификация OpenAPI, на которую ссылается элемент <OASResource>, не существует.
|
|
ResourceCompileFailed |
Спецификация OpenAPI, включенная в развертывание, содержит ошибки, из-за которых ее нельзя скомпилировать. Обычно это означает, что спецификация не соответствует требованиям OpenAPI Specification 3.0. | |
BadResourceURL |
Не удалось обработать спецификацию OpenAPI, указанную в элементе <OASResource>. Это может произойти, если файл не является файлом JSON или YAML или URL файла указан неправильно.
|
Переменные ошибок
Эти переменные задаются, когда правило вызывает ошибку во время выполнения. Подробнее о нарушениях правил…
| Переменные | Место | Пример |
|---|---|---|
fault.name="fault_name" |
fault_name – название ошибки, указанное в таблице Ошибки выполнения выше. Название ошибки – это последняя часть кода ошибки. | fault.name Matches "ResourceDoesNotExist" |
oasvalidation.policy_name.failed |
policy_name – заданное пользователем название правила, которое вызвало ошибку. | oasvalidation.myoaspolicy.failed = true |
Поддерживаемые функции спецификаций OpenAPI
Правило OASValidation поддерживает функции спецификации OpenAPI, которые перечислены в таблице ниже по категориям. Также указаны функции, которые не поддерживаются.
| Категория | Поддерживается | Не поддерживается |
|---|---|---|
| Форматы типов данных | boolean date date-time double float int32/int64 ipv4/ipv6 md5 sha1/sha256/sha512 string uri uri-template uuid |
binary byte password |
| Объект дискриминатора | mapping propertyName |
Н/Д |
| Объект типа медиаконтента | схема; | encoding example examples |
| Объект операций | parameters requestBody responses security (частичная поддержка) |
обратные вызовы устаревшие серверы |
| Объект параметров | allowEmptyValue in ( query, header, path)required responses schema style ( deepObject, form, formmatrix, label, pipeDelimited, simple, spaceDelimited)Примечание. deepObject поддерживает только строковые параметры. Массивы и вложенные объекты не поддерживаются.
|
allowReserved deprecated example examples content |
| Объект "Пути" | delete get head options parameters patch post put trace variables |
серверы; |
| Объект тела запроса | application/json application/hal+json application/x-www-form-urlencoded (объект encoding не поддерживается)content required |
application/xml multipart/form-data text/plain text/xml |
| Объект ответа | application/json application/hal+json application/x-www-form-urlencoded (объект encoding не поддерживается)content headers |
application/xml links text/plain text/xml |
| Объект ответов | default Код статуса HTTP |
Н/Д |
| Объект схемы | $ref additionalProperties (только вариант с логическим флагом) allOf (игнорируется, если additionalProperties – false)anyOf enum exclusiveMaximum/exclusiveMinimum format items maximum/minimum maxItems/minItems maxLength/minLength maxProperties/minProperties multipleOf not nullable oneOf pattern properties required title type uniqueItems |
deprecated example readOnly writeOnly xml |
| Объект схемы безопасности | in (header, query) (игнорируется, если type – http)name type ( apiKey, http)
|
bearerFormat flows openIdConnectUrl scheme |
| Объект сервера | url variables |
Несколько определений сервера |