Vous consultez la documentation Apigee Edge.
Accédez à la documentation Apigee X.

À propos de la stratégie OASValidation
La règle OASValidation (validation de spécification OpenAPI) vous permet de valider une requête ou un message de réponse entrants par rapport à une spécification OpenAPI 3.0 (JSON ou YAML). Consultez la section Quels contenus sont validés ?
La stratégie OASValidation spécifie le nom de la spécification OpenAPI à utiliser pour la validation lorsque l'étape à laquelle la stratégie est associée s'exécute.
La spécification OpenAPI est stockée en tant que ressource dans l'emplacement standard suivant dans le groupe de proxys d'API : apiproxy/resources/oas
.
La spécification OpenAPI doit comporter l'extension .json
, .yml
ou .yaml
.
Ajoutez une spécification OpenAPI en tant que ressource à un groupe de proxys d'API à l'aide de l'interface utilisateur ou de l'API, comme décrit dans Gérer les ressources.
Quel contenu est validé ?
Le tableau suivant récapitule le contenu du message de requête validé par la règle OASValidation, par composant.
Composants | Validation de requête |
---|---|
Basepath | Valide le chemin de base défini par le proxy d'API ; ignore le chemin de base spécifié dans la spécification OpenAPI. |
Chemin | Vérifie que le chemin de la requête (moins le chemin de base) correspond à l'un des formats de chemin d'accès définis dans la spécification OpenAPI. |
Verbe | Vérifie que le verbe est défini pour le chemin d'accès dans la spécification OpenAPI. |
Corps du message de la requête |
Remarque : La règle valide un corps de message de requête par rapport à la spécification OpenAPI uniquement si Type de contenu est défini sur |
Paramètres |
|
Le tableau suivant récapitule le contenu du message de réponse confirmé par la règle OASValidation, par composant.
Composants | Validation de réponse |
---|---|
Chemin | Vérifie que le chemin de la requête (moins le chemin de base) correspond à l'un des formats de chemin d'accès définis dans la spécification OpenAPI. |
Verbe | Vérifie que le verbe est défini pour le chemin d'accès dans la spécification OpenAPI. |
Corps du message de la réponse |
|
Exemples
Les exemples suivants montrent certaines manières d'utiliser la règle OASValidation pour valider les messages par rapport à une spécification OpenAPI 3.0.
Vérifier le message de requête
Dans l'exemple suivant, la règle myoaspolicy
valide le corps du message de requête en fonction du schéma du corps du message de requête de l'opération défini dans la spécification OpenAPI my-spec.json
.
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.json</OASResource> <Options> <ValidateMessageBody>true</ValidateMessageBody> </Options> <Source>request</Source> </OASValidation>
Si le corps du message n'est pas conforme à la spécification OpenAPI, une erreur policies.oasvalidation.Failed
est renvoyée.
Vérifier les paramètres
L'exemple suivant configure la règle pour qu'elle échoue si un paramètre d'en-tête, de requête ou de cookie est spécifié dans la requête mais pas dans la spécification OpenAPI.
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Options> <AllowUnspecifiedParameters> <Header>false</Header> <Query>false</Query> <Cookie>false</Cookie> </AllowUnspecifiedParameters> </Options> </OASValidation>
Élément <OASValidation>
Définit la règle de validation de la spécification OpenAPI.
Valeur par défaut | Consultez l'onglet Règles par défaut ci-dessous. |
Obligatoire ? | Obligatoire |
Type | Objet complexe |
Élément parent | Non disponible |
Éléments enfants |
<DisplayName> <OASResource> <Source> <Options> <Source> |
Syntaxe
L'élément <OASValidation>
utilise la syntaxe suivante :
<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>
Règle par défaut
L'exemple suivant montre les paramètres par défaut lorsque vous ajoutez une règle de validation OAS à votre flux dans l'interface utilisateur d'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>
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 Optionally, use the |
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. |
Référence d'élément enfant
Cette section décrit les éléments enfants de <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>
Spécifie la spécification OpenAPI par rapport à laquelle procéder à la validation. Vous pouvez stocker ce fichier :
- Au niveau du champ d'application de proxy d'API sous
/apiproxy/resources/oas
dans le groupe de proxys d'API - Dans la section
Resources
de la vue du navigateur de l'éditeur de proxy d'API
Pour plus d'informations, consultez Gérer les ressources.
Vous pouvez spécifier la spécification OpenAPI à l'aide d'un modèle de message, tel que {oas.resource.url}
.
Dans ce cas, la valeur de la variable de flux oas.resource.url
(entre accolades) est évaluée et remplacée par la chaîne de charge utile lors de l'exécution.
Pour en savoir plus, consultez l'article Modèles de message.
Valeur par défaut | Aucune |
Obligatoire ? | Obligatoire |
Type | Chaîne |
Élément parent |
<OASValidation>
|
Éléments enfants | Aucun |
Syntaxe
L'élément <OASResource>
utilise la syntaxe suivante :
<OASValidation name="policy_name"> <OASResource>oas://specname[.json|.yaml|.yml]</OASResource> ... </OASValidation>
Exemple
L'exemple suivant fait référence à la spécification my-spec.yaml
stockée sous /apiproxy/resources/oas
dans le groupe de proxys d'API :
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> </OASValidation>
L'élément <OASResource>
ne comporte aucun attribut ni élément enfant.
<Options>
Permet de configurer les options de la stratégie.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Type complexe |
Élément parent |
<OASValidation>
|
Éléments enfants |
<ValidateMessageBody> <AllowUnspecifiedParameters> |
Syntaxe
L'élément <Options>
utilise la syntaxe suivante :
<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>
Exemple
L'exemple suivant configure les options de la stratégie. Chacune des options est décrite plus en détail ci-dessous.
<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>
Spécifie si la stratégie doit valider le corps du message par rapport au schéma du corps de la requête de l'opération dans la spécification OpenAPI. Définissez la valeur sur true pour valider le contenu du corps du message. Définissez la valeur sur false pour confirmer que le corps du message existe.
Vous pouvez vérifier si l'exécution du flux continue après une erreur de validation en définissant l'attribut continueOnError
de l'élément <OASValidation>
sur true.
Valeur par défaut | faux |
Obligatoire ? | Facultatif |
Type | Booléen |
Élément parent |
<Options>
|
Éléments enfants | Aucun |
Syntaxe
L'élément <ValidateMessageBody>
utilise la syntaxe suivante :
<OASValidation name="policy_name"> <OASResource>oas://specname[.json|.yaml|.yml]</OASResource> <Options> <ValidateMessageBody>[true|false]</ValidateMessageBody> </Options> ... </OASValidation>
Exemple
L'exemple suivant active la validation du contenu du corps du message :
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Options> <ValidateMessageBody>true</ValidateMessageBody> </Options> </OASValidation>
<AllowUnspecifiedParameters>
Configure le comportement de la stratégie si des paramètres d'en-tête, de requête ou de cookie sont présents dans la requête et non définis dans la spécification OpenAPI.
Valeur par défaut | N/A |
Obligatoire ? | Facultatif |
Type | Type complexe |
Élément parent |
<Options>
|
Éléments enfants |
<Header> <Query> <Cookie> |
Syntaxe
L'élément <AllowUnspecifiedParameters>
utilise la syntaxe suivante :
<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>
Exemple
L'exemple suivant configure la règle pour qu'elle échoue si un paramètre d'en-tête, de requête ou de cookie est spécifié dans la requête mais pas dans la spécification 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>
(enfant de <AllowUnspecifiedParameters>
)
Configure le comportement de la règle si la requête contient des paramètres de cookie qui ne sont pas définis dans la spécification OpenAPI.
Pour autoriser la spécification des paramètres d'en-tête dans la requête qui ne sont pas définis dans la spécification OpenAPI, définissez ce paramètre sur true. Sinon, définissez ce paramètre sur false pour que l'exécution de la stratégie échoue.
Valeur par défaut | vrai |
Obligatoire ? | Booléen |
Type | Type complexe |
Élément parent |
<AllowUnspecifiedParameters>
|
Éléments enfants | Aucun |
Syntaxe
L'élément <Header>
utilise la syntaxe suivante :
<OASValidation name="policy_name"> <OASResource>oas://specname[.json|.yaml|.yml]</OASResource> <Options> <AllowUnspecifiedParameters> <Header>[true|false]</Header> </AllowUnspecifiedParameters> </Options> ... </OASValidation>
Exemple
L'exemple suivant configure la règle pour qu'elle échoue si un paramètre d'en-tête est spécifié dans la requête mais pas défini dans la spécification OpenAPI.
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Options> <AllowUnspecifiedParameters> <Header>false</Header> </AllowUnspecifiedParameters> </Options> </OASValidation>
<Query>
(enfant de <AllowUnspecifiedParameters>
)
Configure le comportement de la règle si la requête contient des paramètres de requête qui ne sont pas définis dans la spécification OpenAPI.
Pour autoriser la spécification des paramètres de requête dans la requête qui ne sont pas définies dans la spécification OpenAPI, définissez ce paramètre sur true. Sinon, définissez ce paramètre sur false pour que l'exécution de la stratégie échoue.
Valeur par défaut | vrai |
Obligatoire ? | Booléen |
Type | Type complexe |
Élément parent |
<AllowUnspecifiedParameters>
|
Éléments enfants | Aucun |
Syntaxe
L'élément <Query>
utilise la syntaxe suivante :
<OASValidation name="policy_name"> <OASResource>oas://specname[.json|.yaml|.yml]</OASResource> <Options> <AllowUnspecifiedParameters> <Query>[true|false]</Query> </AllowUnspecifiedParameters> </Options> ... </OASValidation>
Exemple
L'exemple suivant configure la règle pour qu'elle échoue si un paramètre de requête est spécifié dans la requête mais pas défini dans la spécification OpenAPI.
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Options> <AllowUnspecifiedParameters> <Query>false</Query> </AllowUnspecifiedParameters> </Options> </OASValidation>
Configure le comportement de la règle si la requête contient des paramètres de cookie qui ne sont pas définis dans la spécification OpenAPI.
Pour autoriser la spécification des paramètres de cookies dans la requête qui ne sont pas définis dans la spécification OpenAPI, définissez ce paramètre sur true. Sinon, définissez ce paramètre sur false pour que l'exécution de la stratégie échoue.
Valeur par défaut | vrai |
Obligatoire ? | Booléen |
Type | Type complexe |
Élément parent |
<AllowUnspecifiedParameters>
|
Éléments enfants | Aucun |
Syntaxe
L'élément <Cookie>
utilise la syntaxe suivante :
<OASValidation name="policy_name"> <OASResource>oas://specname[.json|.yaml|.yml]</OASResource> <Options> <AllowUnspecifiedParameters> <Query>[true|false]</Query> </AllowUnspecifiedParameters> </Options> ... </OASValidation>
Exemple
L'exemple suivant configure la règle pour qu'elle échoue si un paramètre de requête est spécifié dans la requête mais pas défini dans la spécification OpenAPI.
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Options> <AllowUnspecifiedParameters> <Cookie>false</Cookie> </AllowUnspecifiedParameters> </Options> </OASValidation>
<Source>
Message JSON à évaluer par rapport aux attaques contre les charges utiles JSON. Ce paramètre est habituellement défini sur request
, car vous devez généralement évaluer les requêtes entrantes provenant des applications clientes.
Définissez la valeur sur response pour évaluer les messages de réponse.
Définissez la valeur sur message pour évaluer automatiquement le message de requête lorsque la stratégie est associée au flux de la requête et au message de réponse lorsque la stratégie est associée au flux de réponse.
Valeur par défaut | requête |
Obligatoire ? | Facultatif |
Type | Chaîne |
Élément parent |
<Source>
|
Éléments enfants | Aucun |
Syntaxe
L'élément <Source>
utilise la syntaxe suivante :
<OASValidation name="policy_name"> <OASResource>oas://specname[.json|.yaml|.yml]</OASResource> <Source>[message|request|response]</Source> ... </OASValidation>
Exemple
L'exemple suivant évalue automatiquement le message de requête lorsque la règle est associée au flux de la requête et le message de réponse lorsque la règle est associée au flux de réponse :
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Source>message</Source> </OASValidation>
L'élément <Source>
ne comporte aucun attribut ni élément enfant.
Schémas
Chaque type de règle est défini par un schéma XML (.xsd
). Pour référence, des schémas de règles sont disponibles sur GitHub.
Codes d'erreur
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 |
|
steps.oasvalidation.NotMessageVariable |
500 |
|
build |
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 |
Fonctionnalités des spécifications OpenAPI compatibles
La règle OASValidation accepte les fonctionnalités de spécification OpenAPI récapitulées dans le tableau suivant, par catégorie. Les fonctionnalités non compatibles sont également répertoriées.
Catégorie | Compatible | Incompatible |
---|---|---|
Formats de types de données | boolean date date-time double float int32/int64 ipv4/ipv6 md5 sha1/sha256/sha512 string uri uri-template uuid |
binary byte password |
Objet discriminateur | mapping propertyName |
ND |
Objet de type de contenu | schema | encoding example examples |
Objet opérations | parameters requestBody responses security (partial support) |
callbacks deprecated servers |
Objet paramètres | allowEmptyValue dans ( query , header , path )required responses schema style ( deepObject , form , formmatrix , label , pipeDelimited , simple , spaceDelimited )Remarque : deepObject ne prend en charge que les paramètres de chaîne ; les tableaux et les objets imbriqués ne sont pas compatibles.
|
allowReserved deprecated example examples content |
Objet chemins | delete get head options parameters patch post put trace variables |
servers |
Objet corps de la requête | application/json application/hal+json application/x-www-form-urlencoded (objet encoding non compatible)content required |
application/xml multipart/form-data text/plain text/xml |
Objet réponse | application/json application/hal+json application/x-www-form-urlencoded (objet encoding non compatible)content headers |
application/xml links text/plain text/xml |
Objet réponses | default Code d'état HTTP |
N/A |
Objet schéma | $ref additionalProperties (variante d'option booléenne uniquement) allOf (ignored if additionalProperties is 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 |
Objet schéma de sécurité | dans (header , query ) (ignoré si type est http )name type ( apiKey , http )
|
bearerFormat flows openIdConnectUrl scheme |
Objet serveur | url variables |
Définition de plusieurs serveurs |