Политика проверки OAS

Вы просматриваете документацию 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. Настройте эту опцию с помощью <ValidateMessageBody>

Примечание: Политика проверяет тело сообщения запроса на соответствие спецификации OpenAPI только в том случае, если Content-Type установлен на application/json . Если тип содержимого не установлен на application/json , проверка тела сообщения запроса будет пройдена автоматически (без фактической проверки содержимого).

Параметры
  • Проверяет наличие в запросе требуемых параметров, включая путь, заголовок, параметры запроса и cookie.
  • Проверяет, соответствуют ли значения параметров значениям, определенным в спецификации OpenAPI.
  • При желании проверяет, существуют ли в запросе параметры, не определенные в спецификации OpenAPI. Настройте эту опцию с помощью <AllowUnspecifiedParameters>

В следующей таблице обобщено содержимое ответного сообщения , проверяемое политикой OASValidation, по компонентам.

Компоненты Проверка ответа
Путь Проверяет, соответствует ли путь запроса (за исключением базового пути) одному из шаблонов пути, определенных в спецификации OpenAPI.
Глагол Проверяет, что глагол определен для пути в спецификации OpenAPI.
Текст ответного сообщения
  • При необходимости проверяет наличие тела сообщения в ответе.
  • Проверяет, присутствуют ли в ответном сообщении заголовки ответа в спецификации OpenAPI и соответствуют ли значения заголовков ответа схеме.
  • При желании проверяет тело сообщения на соответствие схеме тела ответа операции в спецификации OpenAPI. Настройте эту опцию с помощью <ValidateMessageBody>

Образцы

В следующих примерах показаны некоторые способы использования политики 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 Н/Д Необходимый

Внутреннее имя политики. Значение атрибута name может содержать буквы, цифры, пробелы, дефисы, символы подчеркивания и точки. Это значение не может превышать 255 символов.

При необходимости используйте элемент <DisplayName> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

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>

Настраивает поведение политики, если в запросе присутствуют параметры заголовка, не определенные в спецификации 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

Переменная, указанная в элементе <Source> политики, либо выходит за рамки области действия, либо не может быть разрешена.

steps.oasvalidation.NotMessageVariable 500

Элементу <Source> присвоена переменная, которая не имеет типа message .

Ошибки развертывания

Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.

Название ошибки Причина
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
ответы
безопасность (частичная поддержка)
обратные вызовы
устаревший
серверы
Параметры объекта разрешитьEmptyValue
в ( query , header , path )
необходимый
ответы
схема
стиль ( deepObject , form , formmatrix , label , pipeDelimited , simple , spaceDelimited )

Примечание: deepObject поддерживает только строковые параметры; массивы и вложенные объекты не поддерживаются.
разрешитьЗарезервировано
устаревший
пример
примеры
содержание
Объект «Пути» удалить
получать
голова
параметры
параметры
пластырь
почта
помещать
след
переменные
серверы
Запрос объекта тела приложение/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-код статуса
Н/Д
Объект схемы $реф
additionalProperties (только вариант с логическим флагом)
allOf (игнорируется, если additionalProperties имеет значение false )
любойИз
перечисление
эксклюзивныйМаксимум/эксклюзивныйМинимум
формат
предметы
максимум/минимум
maxItems/minItems
максДлина/минДлина
maxProperties/minProperties
множественныйИз
нет
обнуляемый
один из
шаблон
характеристики
необходимый
заголовок
тип
uniqueItems
устаревший
пример
только для чтения
writeOnly
xml
Объект схемы безопасности в ( header , query ) (игнорируется, если type - http )
имя
тип ( apiKey , http )
Формат носителя
потоки
openIdConnectUrl
схема
Объект сервера URL-адрес
переменные
Определения нескольких серверов

Похожие темы