Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
Informacje o zasadzie OASValidation
Zasada OASValidation (OpenAPI Specification Validation) umożliwia sprawdzanie przychodzącego żądania lub komunikatu odpowiedzi pod kątem zgodności ze specyfikacją OpenAPI 3.0 (JSON lub YAML). Zobacz Jakie treści są sprawdzane?.
Zasada OASValidation określa nazwę specyfikacji OpenAPI, która ma być używana do weryfikacji, gdy wykonywany jest krok, do którego jest dołączona zasada.
Specyfikacja OpenAPI jest przechowywana jako zasób w tej standardowej lokalizacji w pakiecie serwera proxy interfejsu API: apiproxy/resources/oas.
Specyfikacja OpenAPI musi mieć rozszerzenie .json, .yml lub .yaml.
Dodaj specyfikację OpenAPI jako zasób do pakietu serwerów proxy interfejsu API za pomocą interfejsu użytkownika lub interfejsu API, zgodnie z opisem w artykule Zarządzanie zasobami.
Jakie treści są sprawdzane?
Tabela poniżej zawiera podsumowanie treści wiadomości żądania, które są sprawdzane przez zasadę OASValidation, według komponentu.
| Komponenty | Poproś o weryfikację |
|---|---|
| Ścieżka podstawowa | 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 czasownik jest zdefiniowany dla ścieżki w specyfikacji OpenAPI. |
| Treść wiadomości z prośbą |
Uwaga: zasada sprawdza treść wiadomości żądania pod kątem zgodności ze specyfikacją OpenAPI tylko wtedy, gdy typ Content-Type jest ustawiony na |
| Parametry |
|
Tabela poniżej zawiera podsumowanie treści komunikatu odpowiedzi, które są weryfikowane przez zasadę OASValidation, według komponentu.
| 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 czasownik jest zdefiniowany dla ścieżki w specyfikacji OpenAPI. |
| Treść wiadomości z odpowiedzią |
|
Przykłady
Poniższe przykłady pokazują, jak można używać zasady OASValidation do sprawdzania poprawności wiadomości pod kątem specyfikacji OpenAPI 3.0.
Weryfikacja wiadomości z żądaniem
W tym przykładzie zasada myoaspolicy sprawdza treść komunikatu żądania pod kątem schematu treści komunikatu żądania operacji zdefiniowanego w specyfikacji OpenAPI my-spec.json.
<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.
Sprawdzanie poprawności parametrów
W tym przykładzie zasada jest skonfigurowana tak, aby kończyła się niepowodzeniem, jeśli w żądaniu określono nagłówek, zapytanie lub parametry pliku cookie, które nie są zdefiniowane 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 zasadę weryfikacji specyfikacji OpenAPI.
| Wartość domyślna | Zobacz kartę Zasady domyślne poniżej. |
| Wymagane? | Wymagane |
| Typ | Złożony obiekt |
| Element nadrzędny | nie dotyczy |
| Elementy podrzędne |
<DisplayName><OASResource><Source><Options><Source> |
Składnia
Element <OASValidation> używa tej 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>Zasada domyślna
Poniższy przykład pokazuje ustawienia domyślne, gdy dodajesz zasadę walidacji OAS do przepływu w interfejsie 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>Ten element ma te atrybuty, które są wspólne dla wszystkich zasad:
| Atrybut | Domyślnie | Wymagany? | Description |
|---|---|---|---|
name |
Nie dotyczy | Wymagane |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie użyj elementu |
continueOnError |
fałsz | Opcjonalnie | Ustaw wartość „false”, aby wyświetlać błąd, gdy zasada nie działa. To prawidłowy proces w przypadku większości zasad. Ustaw wartość „true”, aby kontynuować wykonywanie przepływu nawet po wystąpieniu błędu. |
enabled |
prawda | Opcjonalnie | Ustaw wartość „true”, aby egzekwować zasadę. Ustaw wartość „false”, aby wyłączyć zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie powiązana z przepływem. |
async |
fałsz | Wycofano | Ten atrybut został wycofany. |
Dokumentacja elementu podrzędnego
W tej sekcji opisano elementy podrzędne elementu <OASValidation>.
<DisplayName>
Używaj go razem z atrybutem name, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną, bardziej naturalnie brzmiącą nazwą.
Element <DisplayName> jest wspólny dla wszystkich zasad.
| Wartość domyślna | nie dotyczy |
| Wymagane? | Opcjonalnie: Jeśli pominiesz parametr <DisplayName>, używana jest wartość atrybutu name zasady. |
| Typ | Ciąg znaków |
| Element nadrzędny | <PolicyElement> |
| Elementy podrzędne | Brak |
Element <DisplayName> używa tej składni:
Składnia
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Przykład
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
Element <DisplayName> nie ma atrybutów ani elementów podrzędnych.
<OASResource>
Określa specyfikację OpenAPI, pod kątem której ma zostać przeprowadzona weryfikacja. Możesz przechowywać ten plik:
- W zakresie serwera proxy interfejsu API w sekcji
/apiproxy/resources/oasw pakiecie serwera proxy interfejsu API. - W sekcji
Resourcesw widoku nawigatora edytora serwerów proxy interfejsu API.
Więcej informacji znajdziesz w artykule o zarządzaniu zasobami.
Specyfikację OpenAPI możesz określić za pomocą szablonu wiadomości, takiego jak {oas.resource.url}.
W tym przypadku wartość zmiennej przepływu oas.resource.url (w nawiasach klamrowych) zostanie oceniona i zastąpiona w ciągu ładunku w czasie działania.
Więcej informacji znajdziesz w artykule Szablony wiadomości.
| Wartość domyślna | Brak |
| Wymagane? | Wymagane |
| Typ | Ciąg znaków |
| Element nadrzędny |
<OASValidation>
|
| Elementy podrzędne | Brak |
Składnia
Element <OASResource> używa tej 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 /apiproxy/resources/oas w pakiecie serwera proxy interfejsu API:
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> </OASValidation>
Element <OASResource> nie ma atrybutów ani elementów podrzędnych.
<Options>
Konfiguruje opcje zasady.
| Wartość domyślna | nie dotyczy |
| Wymagane? | Opcjonalny |
| Typ | Typ złożony |
| Element nadrzędny |
<OASValidation>
|
| Elementy podrzędne |
<ValidateMessageBody><AllowUnspecifiedParameters> |
Składnia
Element <Options> używa tej 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 tym przykładzie skonfigurowano opcje zasady. Poniżej znajdziesz więcej informacji o 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 zasada powinna sprawdzać treść wiadomości pod kątem schematu treści żądania operacji w specyfikacji OpenAPI. Ustaw wartość true, aby sprawdzić zawartość treści wiadomości. Ustaw wartość false, aby sprawdzać tylko, czy treść wiadomości istnieje.
Możesz określić, czy po wystąpieniu błędu weryfikacji wykonywanie przepływu ma być kontynuowane, ustawiając atrybut continueOnError elementu <OASValidation> na wartość true.
| Wartość domyślna | fałsz |
| Wymagane? | Opcjonalny |
| Typ | Wartość logiczna |
| Element nadrzędny |
<Options>
|
| Elementy podrzędne | Brak |
Składnia
Element <ValidateMessageBody> używa tej 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 |
| Wymagane? | Opcjonalny |
| Typ | Typ złożony |
| Element nadrzędny |
<Options>
|
| Elementy podrzędne |
<Header><Query><Cookie> |
Składnia
Element <AllowUnspecifiedParameters> używa tej 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 kończyła się niepowodzeniem, jeśli w żądaniu określono nagłówek, zapytanie lub parametry pliku cookie, które nie są zdefiniowane 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><Header> (element podrzędny elementu <AllowUnspecifiedParameters>)
Konfiguruje zachowanie zasady, jeśli w żądaniu występują parametry nagłówka, które nie są zdefiniowane w specyfikacji OpenAPI.
Aby zezwolić na 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 |
| Wymagane? | Wartość logiczna |
| Typ | Typ złożony |
| Element nadrzędny |
<AllowUnspecifiedParameters>
|
| Elementy podrzędne | Brak |
Składnia
Element <Header> używa tej składni:
<OASValidation name="policy_name">
<OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Header>[true|false]</Header>
</AllowUnspecifiedParameters>
</Options>
...
</OASValidation>Przykład
W tym przykładzie zasada jest skonfigurowana tak, aby nie działała, jeśli w żądaniu określono parametr nagłówka, który nie jest zdefiniowany w specyfikacji OpenAPI.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Header>false</Header>
</AllowUnspecifiedParameters>
</Options>
</OASValidation><Query> (element podrzędny elementu <AllowUnspecifiedParameters>)
Konfiguruje zachowanie zasady, jeśli w żądaniu występują parametry zapytania, które nie są zdefiniowane w specyfikacji OpenAPI.
Aby zezwolić na 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 wykonywania zasady.
| Wartość domyślna | prawda |
| Wymagane? | Wartość logiczna |
| Typ | Typ złożony |
| Element nadrzędny |
<AllowUnspecifiedParameters>
|
| Elementy podrzędne | Brak |
Składnia
Element <Query> używa tej 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 zasada jest skonfigurowana tak, aby nie działała, 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 zezwolić na 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 wykonywania zasady.
| Wartość domyślna | prawda |
| Wymagane? | Wartość logiczna |
| Typ | Typ złożony |
| Element nadrzędny |
<AllowUnspecifiedParameters>
|
| Elementy podrzędne | Brak |
Składnia
Element <Cookie> używa tej 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 zasada jest skonfigurowana tak, aby nie działała, 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 zostać oceniona pod kątem ataków na ładunek JSON. Najczęściej ustawia się wartość request, ponieważ zwykle trzeba oceniać żądania przychodzące z aplikacji klienckich.
Aby oceniać wiadomości z odpowiedzią, ustaw wartość response.
Ustaw wartość message, aby automatycznie oceniać komunikat żądania, gdy zasada jest dołączona do przepływu żądania, i komunikat odpowiedzi, gdy zasada jest dołączona do przepływu odpowiedzi.
| Wartość domyślna | żądanie |
| Wymagane? | Opcjonalny |
| Typ | Ciąg znaków |
| Element nadrzędny |
<Source>
|
| Elementy podrzędne | Brak |
Składnia
Element <Source> używa tej składni:
<OASValidation name="policy_name"> <OASResource>oas://specname[.json|.yaml|.yml]</OASResource> <Source>[message|request|response]</Source> ... </OASValidation>
Przykład
W poniższym przykładzie automatycznie oceniany jest komunikat żądania, gdy zasada jest dołączona do przepływu żądania, oraz komunikat odpowiedzi, gdy zasada jest dołączona 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 zasady jest definiowany przez schemat XML (.xsd). Schematy zasad są dostępne na GitHubie.
Kody błędów
W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
| Kod błędu | Stan HTTP | Przyczyna | |
|---|---|---|---|
steps.oasvalidation.Failed |
500 | Nie można zweryfikować treści wiadomości żądania pod kątem podanej specyfikacji OpenAPI. | |
steps.oasvalidation.SourceMessageNotAvailable |
500 |
Zmienna określona w elemencie |
|
steps.oasvalidation.NotMessageVariable |
500 |
Element |
build |
Błędy wdrażania
Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego te zasady.
| Nazwa błędu | Przyczyna | |
|---|---|---|
ResourceDoesNotExist |
Specyfikacja OpenAPI, do której odwołuje się element <OASResource>, nie istnieje.
|
|
ResourceCompileFailed |
Specyfikacja OpenAPI dołączonej do wdrożenia zawiera błędy, które uniemożliwiają jej skompilowanie. Ogólnie oznacza to, że specyfikacja nie jest poprawnie sformułowaną specyfikacją OpenAPI 3.0. | |
BadResourceURL |
Nie można przetworzyć specyfikacji OpenAPI, do której odwołuje się element <OASResource>. Ten błąd może wystąpić, jeśli plik nie jest plikiem JSON lub YAML albo adres URL pliku nie jest poprawnie określony.
|
Zmienne błędów
Te zmienne są ustawiane, gdy zasada wywołuje błąd w czasie działania. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami.
| Zmienne | Gdzie | Przykład |
|---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu podana w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. | fault.name Matches "ResourceDoesNotExist" |
oasvalidation.policy_name.failed |
policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. | oasvalidation.myoaspolicy.failed = true |
Obsługiwane funkcje specyfikacji OpenAPI
Zasada OASValidation obsługuje 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 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 | parameters requestBody responses security (częściowa obsługa) |
callbacks deprecated servers |
| Obiekt Parameters | 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. Tablice i obiekty zagnieżdżone nie są obsługiwane.
|
allowReserved deprecated example examples content |
| Obiekt Paths | 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 Responses | default Kod stanu HTTP |
Nie dotyczy |
| Obiekt schematu | $ref additionalProperties (tylko wariant flagi logicznej) allOf (ignorowane, jeśli additionalProperties to 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ń | in (header, query) (ignorowane, jeśli type to http)name type ( apiKey, http)
|
bearerFormat flows openIdConnectUrl scheme |
| Obiekt serwera | url zmienne |
Wiele definicji serwerów |