Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. info
О правилах OASValidation
Правило OASValidation (OpenAPI Specification Validation) позволяет проверять входящие запросы или ответы на соответствие спецификации OpenAPI 3.0 (JSON или YAML). Подробнее о том, какой контент проверяется…
Правило OASValidation указывает название спецификации OpenAPI, которая будет использоваться для проверки при выполнении шага, к которому прикреплено правило.
Спецификация OpenAPI хранится как ресурс в следующем стандартном местоположении в пакете прокси-сервера API: apiproxy/resources/oas.
Спецификация OpenAPI должна иметь расширение .json, .yml или .yaml.
Добавьте спецификацию OpenAPI в качестве ресурса в пакет прокси-сервера API с помощью пользовательского интерфейса или API, как описано в разделе Управление ресурсами.
Какой контент проверяется?
В таблице ниже приведены сведения о том, какой контент запроса проверяется правилом OASValidation, с разбивкой по компонентам.
| Компоненты | Запросить проверку |
|---|---|
| Базовый путь | Проверяет базовый путь, определенный прокси-сервером 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 Validation в поток в интерфейсе 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в представлении Navigator редактора прокси-сервера 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 |
| Объект Discriminator | mapping propertyName |
Н/Д |
| Объект типа медиа | схема | encoding example examples |
| Объект Operations | parameters requestBody responses security (частичная поддержка) |
callbacks deprecated servers |
| Объект параметров | allowEmptyValue in ( query, header, path)required responses schema style ( deepObject, form, formmatrix, label, pipeDelimited, simple, spaceDelimited)Примечание. deepObject поддерживает только строковые параметры. Массивы и вложенные объекты не поддерживаются.
|
allowReserved deprecated example examples content |
| Объект Paths | delete get head options parameters patch post put trace variables |
серверы |
| Объект тела запроса | application/json application/hal+json application/x-www-form-urlencoded (объект encoding не поддерживается)content обязательно |
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 |
| Объект Responses | 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 |
Несколько определений серверов |