Zasady OASwalidacji

Wyświetlasz dokumentację Apigee Edge.
Zapoznaj się z dokumentacją Apigee X. info

Informacje o zasadach OASValidation

Zasada OASValidation (OpenAPI Specification Validation) umożliwia weryfikację przychodzącego żądania lub wiadomości z odpowiedzią na podstawie specyfikacji OpenAPI 3.0 (JSON lub YAML). Zobacz jakie treści są weryfikowane

Zasada OASValidation określa nazwę specyfikacji OpenAPI, która ma być używana do weryfikacji podczas wykonywania kroku, do którego jest dołączona. Specyfikacja OpenAPI jest przechowywana jako zasób w standardowej lokalizacji w pakiecie proxy interfejsu API: apiproxy/resources/oas. Specyfikacja OpenAPI musi mieć rozszerzenie .json, .yml, .yaml.

Dodaj specyfikację OpenAPI jako zasób do pakietu proxy interfejsu API za pomocą interfejsu lub interfejsu API zgodnie z opisem w artykule Zarządzanie zasobami.

Jakie treści są weryfikowane?

Poniższa tabela zawiera podsumowanie treści wiadomości z żądaniem, które są weryfikowane przez regułę OASValidation według komponentu.

Komponenty Poproś o weryfikację
Basepath Weryfikuje ścieżkę podstawową zdefiniowaną przez serwer proxy interfejsu API; ignoruje ścieżkę podstawową określoną w specyfikacji OpenAPI.
Ścieżka Sprawdza, czy ścieżka żądania (bez ścieżki podstawowej) pasuje do jednego ze wzorców ścieżek zdefiniowanych w specyfikacji OpenAPI.
Czasownik Sprawdza, czy w specyfikacji OpenAPI dla ścieżki zdefiniowano czasownik.
Treść żądania
  • Weryfikuje, czy w żądaniu znajduje się treść wiadomości (jeśli jest wymagana).
  • Opcjonalnie sprawdza treść wiadomości pod kątem schematu treści żądania operacji w specyfikacji OpenAPI. Skonfiguruj tę opcję za pomocą <ValidateMessageBody>

Uwaga: zasada weryfikuje treść wiadomości żądania na podstawie specyfikacji OpenAPI tylko wtedy, gdy nagłówek Content-Type jest ustawiony na application/json. Jeśli typ treści nie jest ustawiony na application/json, weryfikacja treści w treści wiadomości z prośbą zostanie automatycznie zakończona (bez faktycznego sprawdzania treści).

Parametry
  • Sprawdza, czy w żądaniu są obecne wymagane parametry, w tym parametry ścieżki, nagłówka, zapytania i pliku cookie.
  • Sprawdza, czy wartości parametrów są zgodne z wartościami zdefiniowanymi w specyfikacji OpenAPI.
  • Opcjonalnie sprawdza, czy w żądaniu występują parametry, które nie są zdefiniowane w specyfikacji OpenAPI. Skonfiguruj tę opcję za pomocą <AllowUnspecifiedParameters>

W tej tabeli znajdziesz podsumowanie treści wiadomości odpowiedzi, które są weryfikowane przez komponenty zasad OASValidation.

Komponenty Weryfikacja odpowiedzi
Ścieżka Sprawdza, czy ścieżka żądania (bez ścieżki podstawowej) pasuje do jednego ze wzorców ścieżek zdefiniowanych w specyfikacji OpenAPI.
Czasownik Sprawdza, czy w specyfikacji OpenAPI dla ścieżki zdefiniowano czasownik.
Treść odpowiedzi
  • Weryfikuje, czy treść wiadomości jest obecna w odpowiedzi, jeśli jest to wymagane.
  • Sprawdza, czy nagłówki odpowiedzi w specyfikacji OpenAPI są obecne w wiadomości z odpowiedzią i czy wartość nagłówków odpowiedzi jest zgodna ze schematem.
  • Opcjonalnie sprawdza treść wiadomości pod kątem schematu treści odpowiedzi operacji w specyfikacji OpenAPI. Skonfiguruj tę opcję za pomocą <ValidateMessageBody>

Przykłady

Poniższe przykłady pokazują, jak za pomocą zasady OASValidation weryfikować wiadomości na podstawie specyfikacji OpenAPI 3.0.

Weryfikowanie wiadomości z prośbą

W tym przykładzie zasada myoaspolicy weryfikuje treść wiadomości z żądaniem pod kątem schematu treści wiadomości z żądaniem operacji zdefiniowanego w my-spec.json specyfikacji OpenAPI.

<OASValidation name="myoaspolicy">
   <OASResource>oas://my-spec.json</OASResource>
   <Options>
      <ValidateMessageBody>true</ValidateMessageBody>
   </Options>
   <Source>request</Source>
</OASValidation>

Jeśli treść wiadomości nie jest zgodna ze specyfikacją OpenAPI, zwracany jest błąd policies.oasvalidation.Failed.

Weryfikacja parametrów

W tym przykładzie zasada jest skonfigurowana tak, aby zwracać błąd, jeśli w żądaniu określono nagłówek, zapytanie lub parametr pliku cookie, który nie jest zdefiniowany w specyfikacji OpenAPI.

<OASValidation name="myoaspolicy">
   <OASResource>oas://my-spec.yaml</OASResource>
   <Options>
      <AllowUnspecifiedParameters>
         <Header>false</Header>
         <Query>false</Query>
         <Cookie>false</Cookie>
      </AllowUnspecifiedParameters>
   </Options>
</OASValidation>

Element <OASValidation>

Definiuje zasady weryfikacji specyfikacji OpenAPI.

Wartość domyślna Zobacz kartę Zasady domyślne poniżej
Wymagany? Wymagane
Typ Obiekt złożony
Element nadrzędny nie dotyczy
Elementy podrzędne <DisplayName>
<OASResource>
<Source>
<Options>
<Source>

Składnia

Element <OASValidation> ma tę składnię:

<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>

Domyślne zasady

Poniższy przykład pokazuje ustawienia domyślne po dodaniu do przepływu w interfejsie Apigee zasady weryfikacji OAS:

<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>

This element has the following attributes that are common to all policies:

Attribute Default Required? Description
name N/A Required

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

continueOnError false Optional Set to "false" to return an error when a policy fails. This is expected behavior for most policies. Set to "true" to have flow execution continue even after a policy fails.
enabled true Optional Set to "true" to enforce the policy. Set to "false" to "turn off" the policy. The policy will not be enforced even if it remains attached to a flow.
async   false Deprecated This attribute is deprecated.

Odwołanie do elementu podrzędnego

W tej sekcji opisujemy elementy podrzędne elementu <OASValidation>.

<DisplayName>

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, more natural-sounding name.

The <DisplayName> element is common to all policies.

Default Value n/a
Required? Optional. If you omit <DisplayName>, the value of the policy's name attribute is used
Type String
Parent Element <PolicyElement>
Child Elements None

The <DisplayName> element uses the following syntax:

Syntax

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

Example

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

The <DisplayName> element has no attributes or child elements.

<OASResource>

Określa specyfikację OpenAPI, z którą ma być przeprowadzona weryfikacja. Ten plik możesz przechowywać:

  • W zakresie proxy interfejsu API w sekcji /apiproxy/resources/oas w pakiecie proxy interfejsu API
  • W sekcji Resources w widoku Nawigator edytora proxy interfejsu API.

Więcej informacji znajdziesz w artykule o zarządzaniu zasobami.

Specyfikację OpenAPI możesz określić za pomocą szablonu wiadomości, np. {oas.resource.url}. W tym przypadku wartość zmiennej przepływu oas.resource.url (w nawiasach klamrowych) zostanie obliczona i wstawiona do ciągu ładunku w czasie działania. Więcej informacji znajdziesz w artykule Szablony wiadomości.

Wartość domyślna Brak
Wymagany? Wymagane
Typ Ciąg znaków
Element nadrzędny <OASValidation>
Elementy podrzędne Brak

Składnia

Element <OASResource> ma tę składnię:

<OASValidation name="policy_name">
   <OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
   ...
</OASValidation>

Przykład

Poniższy przykład odwołuje się do specyfikacji my-spec.yaml, która jest przechowywana w pakiecie proxy interfejsu API w folderze /apiproxy/resources/oas:

<OASValidation name="myoaspolicy">
   <OASResource>oas://my-spec.yaml</OASResource>
</OASValidation>

Element <OASResource> nie ma atrybutów ani elementów podrzędnych.

<Opcje>

Konfiguruje opcje zasad.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Typ złożony
Element nadrzędny <OASValidation>
Elementy podrzędne <ValidateMessageBody>
<AllowUnspecifiedParameters>

Składnia

Element <Options> ma tę składnię:

<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>

Przykład

W poniższym przykładzie skonfigurowano opcje zasady. Poniżej znajdziesz szczegółowe omówienie każdej z tych opcji.

<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>

Określa, czy zasady mają sprawdzać treść wiadomości pod kątem schematu treści żądania operacji w specyfikacji OpenAPI. Ustaw jako true, aby zweryfikować zawartość treści wiadomości. Ustaw wartość false, aby sprawdzić tylko, czy treść wiadomości istnieje.

Możesz określić, czy wykonanie przepływu ma być kontynuowane po wystąpieniu błędu weryfikacji, ustawiając atrybut continueOnError elementu <OASValidation> na wartość true.

Wartość domyślna fałsz
Wymagany? Opcjonalny
Typ Wartość logiczna
Element nadrzędny <Options>
Elementy podrzędne Brak

Składnia

Element <ValidateMessageBody> ma tę składnię:

<OASValidation name="policy_name">
   <OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
   <Options>
         <ValidateMessageBody>[true|false]</ValidateMessageBody>
   </Options>
   ...
</OASValidation>

Przykład

Ten przykład umożliwia weryfikację treści wiadomości:

<OASValidation name="myoaspolicy">
   <OASResource>oas://my-spec.yaml</OASResource>
   <Options>
      <ValidateMessageBody>true</ValidateMessageBody>
   </Options>
</OASValidation>

<AllowUnspecifiedParameters>

Konfiguruje działanie zasady, jeśli w żądaniu występują parametry nagłówka, zapytania lub pliku cookie, które nie są zdefiniowane w specyfikacji OpenAPI.

Wartość domyślna nie dotyczy
Wymagany? Opcjonalny
Typ Typ złożony
Element nadrzędny <Options>
Elementy podrzędne <Header>
<Query>
<Cookie>

Składnia

Element <AllowUnspecifiedParameters> ma tę składnię:

<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>

Przykład

W tym przykładzie zasada jest skonfigurowana tak, aby zwracać błąd, jeśli w żądaniu określono nagłówek, zapytanie lub parametr pliku cookie, który nie jest zdefiniowany w specyfikacji OpenAPI.

<OASValidation name="myoaspolicy">
   <OASResource>oas://my-spec.yaml</OASResource>
   <Options>
      <AllowUnspecifiedParameters>
         <Header>false</Header>
         <Query>false</Query>
         <Cookie>false</Cookie>
      </AllowUnspecifiedParameters>
   </Options>
</OASValidation>

Konfiguruje zachowanie zasady, jeśli w żądaniu występują parametry nagłówka, które nie są zdefiniowane w specyfikacji OpenAPI.

Aby umożliwić określanie w żądaniu parametrów nagłówka, które nie są zdefiniowane w specyfikacji OpenAPI, ustaw ten parametr na true. W przeciwnym razie ustaw ten parametr na false, aby spowodować niepowodzenie wykonania zasady.

Wartość domyślna prawda
Wymagany? Wartość logiczna
Typ Typ złożony
Element nadrzędny <AllowUnspecifiedParameters>
Elementy podrzędne Brak

Składnia

Element <Header> ma tę składnię:

<OASValidation name="policy_name">
   <OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
   <Options>
      <AllowUnspecifiedParameters>
         <Header>[true|false]</Header>
      </AllowUnspecifiedParameters>
   </Options>
   ...
</OASValidation>

Przykład

Poniższy przykład konfiguruje zasadę tak, aby w przypadku podania w żądaniu parametru nagłówka, który nie jest zdefiniowany w specyfikacji OpenAPI, zwracała błąd.

<OASValidation name="myoaspolicy">
   <OASResource>oas://my-spec.yaml</OASResource>
   <Options>
      <AllowUnspecifiedParameters>
         <Header>false</Header>
      </AllowUnspecifiedParameters>
   </Options>
</OASValidation>

<Query> (element podrzędny <AllowUnspecifiedParameters>)

Konfiguruje zachowanie zasady, jeśli w żądaniu występują parametry zapytania, które nie są zdefiniowane w specyfikacji OpenAPI.

Aby umożliwić określanie w żądaniu parametrów zapytania, które nie są zdefiniowane w specyfikacji OpenAPI, ustaw ten parametr na true. W przeciwnym razie ustaw ten parametr na false, aby spowodować niepowodzenie wykonania zasady.

Wartość domyślna prawda
Wymagany? Wartość logiczna
Typ Typ złożony
Element nadrzędny <AllowUnspecifiedParameters>
Elementy podrzędne Brak

Składnia

Element <Query> ma tę składnię:

<OASValidation name="policy_name">
   <OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
   <Options>
      <AllowUnspecifiedParameters>
         <Query>[true|false]</Query>
      </AllowUnspecifiedParameters>
   </Options>
   ...
</OASValidation>

Przykład

W tym przykładzie skonfigurowano zasadę, która powoduje błąd, jeśli w żądaniu określono parametr zapytania, który nie jest zdefiniowany w specyfikacji OpenAPI.

<OASValidation name="myoaspolicy">
   <OASResource>oas://my-spec.yaml</OASResource>
   <Options>
      <AllowUnspecifiedParameters>
         <Query>false</Query>
      </AllowUnspecifiedParameters>
   </Options>
</OASValidation>

Konfiguruje działanie zasady, jeśli w żądaniu występują parametry plików cookie, które nie są zdefiniowane w specyfikacji OpenAPI.

Aby umożliwić określanie w żądaniu parametrów plików cookie, które nie są zdefiniowane w specyfikacji OpenAPI, ustaw ten parametr na true. W przeciwnym razie ustaw ten parametr na false, aby spowodować niepowodzenie wykonania zasady.

Wartość domyślna prawda
Wymagany? Wartość logiczna
Typ Typ złożony
Element nadrzędny <AllowUnspecifiedParameters>
Elementy podrzędne Brak

Składnia

Element <Cookie> ma tę składnię:

<OASValidation name="policy_name">
   <OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
   <Options>
      <AllowUnspecifiedParameters>
         <Query>[true|false]</Query>
      </AllowUnspecifiedParameters>
   </Options>
   ...
</OASValidation>

Przykład

W tym przykładzie skonfigurowano zasadę, która powoduje błąd, jeśli w żądaniu określono parametr zapytania, który nie jest zdefiniowany w specyfikacji OpenAPI.

<OASValidation name="myoaspolicy">
   <OASResource>oas://my-spec.yaml</OASResource>
   <Options>
      <AllowUnspecifiedParameters>
         <Cookie>false</Cookie>
      </AllowUnspecifiedParameters>
   </Options>
</OASValidation>

<Source>

Wiadomość JSON, która ma być oceniana pod kątem ataków na ładunek JSON. Zwykle jest to ustawione na wartość request, ponieważ zazwyczaj musisz ocenić żądania przychodzące z aplikacji klienckich. Aby oceniać wiadomości z odpowiedzią, ustaw wartość response. Ustaw wartość message, aby automatycznie oceniać wiadomość z prośbą, gdy zasada jest dołączona do przepływu prośby, oraz wiadomość z odpowiedzią, gdy zasada jest dołączona do przepływu odpowiedzi.

Wartość domyślna żądanie
Wymagany? Opcjonalny
Typ Ciąg znaków
Element nadrzędny <Source>
Elementy podrzędne Brak

Składnia

Element <Source> ma tę składnię:

<OASValidation name="policy_name">
   <OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
   <Source>[message|request|response]</Source>
   ...
</OASValidation>

Przykład

W tym przykładzie automatycznie oceniana jest wiadomość z żądaniem, gdy zasady są dołączone do przepływu żądania, oraz wiadomość z odpowiedzią, gdy zasady są dołączone do przepływu odpowiedzi:

<OASValidation name="myoaspolicy">
   <OASResource>oas://my-spec.yaml</OASResource>
   <Source>message</Source>
</OASValidation>

Element <Source> nie ma atrybutów ani elementów podrzędnych.

Schematy

Każdy typ zasad jest zdefiniowany przez schemat XML (.xsd). Schematy zasad są dostępne na GitHubie.

Kody błędów

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause
steps.oasvalidation.Failed 500 Request message body cannot be validated against the provided OpenAPI Specification.
steps.oasvalidation.SourceMessageNotAvailable 500

Variable specified in the <Source> element of the policy is either out of scope or cannot be resolved.

steps.oasvalidation.NotMessageVariable 500

<Source> element is set to a variable that is not of type message.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause
ResourceDoesNotExist OpenAPI Specification referenced in the <OASResource> element does not exist.
ResourceCompileFailed OpenAPI Specification that is included in the deployment contains errors that prevent it from being compiled. This generally indicates that the specification is not a well-formed OpenAPI Specification 3.0.
BadResourceURL OpenAPI Specification referenced in the <OASResource> element cannot be processed. This can occur if the file is not a JSON or YAML file or the file URL is not specified correctly.

Fault variables

These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "ResourceDoesNotExist"
oasvalidation.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. oasvalidation.myoaspolicy.failed = true

Obsługiwane funkcje specyfikacji OpenAPI

Zasady OASValidation obsługują funkcje specyfikacji OpenAPI, które zostały podsumowane w tabeli poniżej według kategorii. Wymienione są też funkcje, które nie są obsługiwane.

Kategoria Obsługiwane Nieobsługiwane
Formaty typów danych boolean
date
date-time
double
email
float
int32/int64
ipv4/ipv6
md5
sha1/sha256/sha512
string
uri
uri-template
uuid
binary
byte
password
Obiekt wyróżnika mapping
propertyName
Nie dotyczy
Obiekt typu multimediów schemat encoding
example
examples
Obiekt operacji parametry
requestBody
responses
security (częściowa obsługa)
callbacks
deprecated
servers
Obiekt parametrów allowEmptyValue
in (query, header, path)
required
responses
schema
style (deepObject, form, formmatrix, label, pipeDelimited, simple, spaceDelimited)

Uwaga: deepObject obsługuje tylko parametry ciągu znaków. Nie obsługuje tablic ani zagnieżdżonych obiektów.
allowReserved
deprecated
example
examples
content
Obiekt ścieżek delete
get
head
options
parameters
patch
post
put
trace
variables
serwery,
Obiekt treści żądania application/json
application/hal+json
application/x-www-form-urlencoded (obiekt encoding nie jest obsługiwany)
content
required
application/xml
multipart/form-data
text/plain
text/xml
Obiekt odpowiedzi application/json
application/hal+json
application/x-www-form-urlencoded (obiekt encoding nie jest obsługiwany)
content
headers
application/xml
links
text/plain
text/xml
Obiekt odpowiedzi default
Kod stanu HTTP
Nie dotyczy
Obiekt schematu $ref
additionalProperties (tylko wariant flagi logicznej)
allOf (ignorowany, jeśli additionalProperties ma wartość 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
Obiekt schematu zabezpieczeń w (header, query) (ignorowane, jeśli type to http)
name
type (apiKey, http)
bearerFormat
flows
openIdConnectUrl
scheme
Obiekt serwera url
variables
Wiele definicji serwera

Powiązane artykuły