Вы просматриваете документацию Apigee Edge .
Перейти к документации Apigee X. info

О политике валидации OAS
Политика OASValidation (проверка спецификации OpenAPI) позволяет проверять входящие запросы и ответы на соответствие спецификации 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 только в том случае, если для типа контента задано значение |
Параметры |
|
В следующей таблице обобщено содержимое ответного сообщения , проверяемое политикой 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
, которая хранится в /apiproxy/resources/oas
в пакете прокси API:
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> </OASValidation>
Элемент <OASResource>
не имеет атрибутов или дочерних элементов.
<Параметры>
Настраивает параметры политики.
Значение по умолчанию | н/д |
Необходимый? | Необязательный |
Тип | Сложный тип |
Родительский элемент | <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 .
Значение по умолчанию | ЛОЖЬ |
Необходимый? | Необязательный |
Тип | Булевое значение |
Родительский элемент | <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 , чтобы вызвать сбой выполнения политики.
Значение по умолчанию | истинный |
Необходимый? | Булевое значение |
Тип | Сложный тип |
Родительский элемент | <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 , чтобы вызвать сбой выполнения политики.
Значение по умолчанию | истинный |
Необходимый? | Булевое значение |
Тип | Сложный тип |
Родительский элемент | <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 , чтобы вызвать сбой выполнения политики.
Значение по умолчанию | истинный |
Необходимый? | Булевое значение |
Тип | Сложный тип |
Родительский элемент | <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 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, которые перечислены в следующей таблице по категориям. Также перечислены функции, которые не поддерживаются.
Категория | Поддерживается | Не поддерживается |
---|---|---|
Форматы типов данных | булев дата дата-время двойной электронная почта плавать int32/int64 ipv4/ipv6 md5 sha1/sha256/sha512 нить ури uri-шаблон uuid | двоичный байт пароль |
Объект дискриминатора | картографирование Имя_свойства | Н/Д |
Тип объекта медиа | схема | кодирование пример примеры |
Объект операции | параметры requestBody ответы безопасность (частичная поддержка) | обратные вызовы устаревший серверы |
Параметры объекта | allowEmptyValue в ( query , header , path )необходимый ответы схема стиль ( deepObject , form , formmatrix , label , pipeDelimited , simple , spaceDelimited )Примечание: deepObject поддерживает только строковые параметры; массивы и вложенные объекты не поддерживаются. | разрешитьЗарезервировано устаревший пример примеры содержание |
Объект Paths | удалить получать голова параметры параметры пластырь почта помещать след переменные | серверы |
Объект тела запроса | приложение/json приложение/hal+json application/x-www-form-urlencoded (объект encoding не поддерживается)содержание необходимый | приложение/xml multipart/form-data текст/обычный текст/xml |
Объект ответа | приложение/json приложение/hal+json application/x-www-form-urlencoded (объект encoding не поддерживается)содержание заголовки | приложение/xml ссылки текст/обычный текст/xml |
Объект ответов | по умолчанию Код статуса HTTP | Н/Д |
Объект схемы | $ref additionalProperties (только вариант с логическим флагом) allOf (игнорируется, если additionalProperties равно false )любойИз перечисление эксклюзивныйМаксимум/эксклюзивныйМинимум формат предметы максимум/минимум maxItems/minItems макс.длина/мин.длина maxProperties/minProperties множественные нет обнуляемый один из шаблон характеристики необходимый заголовок тип uniqueItems | устаревший пример только для чтения только запись XML |
Объект схемы безопасности | в ( header , query ) (игнорируется, если type - http )имя тип ( apiKey , http ) | bearerFormat потоки openIdConnectUrl схема |
Объект сервера | URL-адрес переменные | Несколько определений сервера |