Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Informazioni sulla policy OASValidation
La policy OASValidation (OpenAPI Specification Validation) consente di convalidare un messaggio di richiesta o risposta in entrata rispetto a una specifica OpenAPI 3.0 (JSON o YAML). Consulta la sezione Quali contenuti vengono convalidati?
La policy OASValidation specifica il nome della specifica OpenAPI da utilizzare per la convalida quando viene eseguito il passaggio a cui è associata la policy.
La specifica OpenAPI viene archiviata come risorsa nella seguente posizione standard all'interno del bundle del proxy API: apiproxy/resources/oas.
La specifica OpenAPI deve avere un'estensione .json, .yml, .yaml.
Aggiungi una specifica OpenAPI come risorsa a un bundle di proxy API utilizzando la UI o l'API, come descritto in Gestisci le risorse.
Quali contenuti vengono convalidati?
La tabella seguente riassume il contenuto del messaggio di richiesta convalidato dalla policy OASValidation, per componente.
| Componenti | Richiedi convalida |
|---|---|
| Percorso di base | Convalida il percorso di base definito dal proxy API; ignora il percorso di base specificato nella specifica OpenAPI. |
| Percorso | Convalida che il percorso della richiesta (meno il percorso di base) corrisponda a uno dei pattern di percorso definiti nella specifica OpenAPI. |
| Verbo | Convalida che il verbo sia definito per il percorso nella specifica OpenAPI. |
| Corpo del messaggio di richiesta |
Nota: la policy convalida il corpo di un messaggio di richiesta rispetto alla specifica OpenAPI solo se Content-Type è impostato su |
| Parametri |
|
La seguente tabella riassume il contenuto del messaggio di risposta convalidato dalla policy OASValidation, per componente.
| Componenti | Convalida della risposta |
|---|---|
| Percorso | Convalida che il percorso della richiesta (meno il percorso di base) corrisponda a uno dei pattern di percorso definiti nella specifica OpenAPI. |
| Verbo | Convalida che il verbo sia definito per il percorso nella specifica OpenAPI. |
| Corpo del messaggio di risposta |
|
Esempi
Gli esempi seguenti mostrano alcuni dei modi in cui puoi utilizzare la policy OASValidation per convalidare i messaggi rispetto a una specifica OpenAPI 3.0.
Convalida messaggio di richiesta
Nell'esempio seguente, la policy myoaspolicy convalida il corpo del messaggio di richiesta rispetto allo schema del corpo del messaggio di richiesta dell'operazione definito nella specifica OpenAPI my-spec.json.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.json</OASResource>
<Options>
<ValidateMessageBody>true</ValidateMessageBody>
</Options>
<Source>request</Source>
</OASValidation>
Se il corpo del messaggio non è conforme alla specifica OpenAPI, viene restituito un errore policies.oasvalidation.Failed.
Convalida i parametri
L'esempio seguente configura la policy in modo che non vada a buon fine se nella richiesta viene specificato un parametro di intestazione, query o cookie non definito nella specifica OpenAPI.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Header>false</Header>
<Query>false</Query>
<Cookie>false</Cookie>
</AllowUnspecifiedParameters>
</Options>
</OASValidation>Elemento <OASValidation>
Definisce la policy OpenAPI Specification Validation.
| Valore predefinito | Consulta la scheda Policy predefinita di seguito |
| Obbligatorio? | Obbligatorio |
| Tipo | Oggetto complesso |
| Elemento principale | n/a |
| Elementi secondari |
<DisplayName><OASResource><Source><Options><Source> |
Sintassi
L'elemento <OASValidation> utilizza la seguente sintassi:
<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>Policy predefinita
L'esempio seguente mostra le impostazioni predefinite quando aggiungi una policy di convalida OAS al tuo flusso nell'interfaccia utente di 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>Questo elemento ha i seguenti attributi comuni a tutti i criteri:
| Attributo | Predefinita | Obbligatorio? | Description (Descrizione) |
|---|---|---|---|
name |
N/A | Obbligatorio |
Il nome interno del criterio. Il valore dell'attributo Facoltativamente, utilizza l'elemento |
continueOnError |
false | Facoltativo | Imposta su "false" per restituire un errore quando un criterio non va a buon fine. Si tratta di un comportamento previsto per la maggior parte dei criteri. Impostalo su "true" per far sì che l'esecuzione del flusso continui anche dopo l'esito negativo di un criterio. |
enabled |
true | Facoltativo | Imposta su "true" per applicare il criterio. Imposta su "false" per "disattivare" il criterio. Il criterio non verrà applicato anche se rimane collegato a un flusso. |
async |
false | Deprecazione | Questo attributo è obsoleto. |
Riferimento dell'elemento secondario
Questa sezione descrive gli elementi secondari di <OASValidation>.
<DisplayName>
Utilizzalo in aggiunta all'attributo name per etichettare la policy nell'editor proxy dell'interfaccia utente di gestione con un nome diverso e più naturale.
L'elemento <DisplayName> è comune a tutte le policy.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo. Se ometti <DisplayName>, viene utilizzato il valore dell'attributo name della policy. |
| Tipo | Stringa |
| Elemento principale | <PolicyElement> |
| Elementi secondari | Nessuno |
L'elemento <DisplayName> utilizza la seguente sintassi:
Sintassi
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Esempio
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
L'elemento <DisplayName> non ha attributi o elementi secondari.
<OASResource>
Specifica la specifica OpenAPI in base alla quale eseguire la convalida. Puoi archiviare questo file:
- Nell'ambito del proxy API in
/apiproxy/resources/oasnel bundle del proxy API - Nella sezione
Resourcesdella visualizzazione Navigator dell'editor del proxy API.
Per saperne di più, consulta Gestisci le risorse.
Puoi specificare la specifica OpenAPI utilizzando un modello di messaggio, ad esempio {oas.resource.url}.
In questo caso, il valore della variabile di flusso oas.resource.url (tra parentesi graffe) verrà valutato e sostituito nella stringa del payload in fase di runtime.
Per saperne di più, consulta Modelli di messaggi.
| Valore predefinito | Nessuno |
| Obbligatorio? | Obbligatorio |
| Tipo | Stringa |
| Elemento principale |
<OASValidation>
|
| Elementi secondari | Nessuno |
Sintassi
L'elemento <OASResource> utilizza la seguente sintassi:
<OASValidation name="policy_name"> <OASResource>oas://specname[.json|.yaml|.yml]</OASResource> ... </OASValidation>
Esempio
L'esempio seguente fa riferimento alla specifica my-spec.yaml archiviata in /apiproxy/resources/oas nel bundle del proxy API:
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> </OASValidation>
L'elemento <OASResource> non ha attributi o elementi secondari.
<Options>
Configura le opzioni per la policy.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Tipo complesso |
| Elemento principale |
<OASValidation>
|
| Elementi secondari |
<ValidateMessageBody><AllowUnspecifiedParameters> |
Sintassi
L'elemento <Options> utilizza la seguente sintassi:
<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>Esempio
L'esempio seguente configura le opzioni per la policy. Ciascuna opzione è descritta più dettagliatamente di seguito.
<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>
Specifica se la policy deve convalidare il corpo del messaggio rispetto allo schema del corpo della richiesta dell'operazione nella specifica OpenAPI. Impostalo su true per convalidare i contenuti del corpo del messaggio. Impostalo su false per convalidare solo l'esistenza del corpo del messaggio.
Puoi controllare se l'esecuzione del flusso continua dopo un errore di convalida impostando l'attributo continueOnError per l'elemento <OASValidation> su true.
| Valore predefinito | false |
| Obbligatorio? | Facoltativo |
| Tipo | Booleano |
| Elemento principale |
<Options>
|
| Elementi secondari | Nessuno |
Sintassi
L'elemento <ValidateMessageBody> utilizza la seguente sintassi:
<OASValidation name="policy_name">
<OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
<Options>
<ValidateMessageBody>[true|false]</ValidateMessageBody>
</Options>
...
</OASValidation>Esempio
L'esempio seguente attiva la convalida dei contenuti del corpo del messaggio:
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<ValidateMessageBody>true</ValidateMessageBody>
</Options>
</OASValidation><AllowUnspecifiedParameters>
Configura il comportamento della policy se nella richiesta sono presenti parametri di intestazione, query o cookie non definiti nella specifica OpenAPI.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Tipo complesso |
| Elemento principale |
<Options>
|
| Elementi secondari |
<Header><Query><Cookie> |
Sintassi
L'elemento <AllowUnspecifiedParameters> utilizza la seguente sintassi:
<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>Esempio
L'esempio seguente configura la policy in modo che non vada a buon fine se nella richiesta viene specificato un parametro di intestazione, query o cookie non definito nella specifica 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> (figlio di <AllowUnspecifiedParameters>)
Configura il comportamento della policy se nella richiesta sono presenti parametri di intestazione non definiti nella specifica OpenAPI.
Per consentire di specificare nella richiesta parametri di intestazione non definiti nella specifica OpenAPI, imposta questo parametro su true. In caso contrario, imposta questo parametro su false per causare l'errore di esecuzione della policy.
| Valore predefinito | true |
| Obbligatorio? | Booleano |
| Tipo | Tipo complesso |
| Elemento principale |
<AllowUnspecifiedParameters>
|
| Elementi secondari | Nessuno |
Sintassi
L'elemento <Header> utilizza la seguente sintassi:
<OASValidation name="policy_name">
<OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Header>[true|false]</Header>
</AllowUnspecifiedParameters>
</Options>
...
</OASValidation>Esempio
L'esempio seguente configura la policy in modo che non vada a buon fine se nella richiesta viene specificato un parametro di intestazione non definito nella specifica OpenAPI.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Header>false</Header>
</AllowUnspecifiedParameters>
</Options>
</OASValidation><Query> (figlio di <AllowUnspecifiedParameters>)
Configura il comportamento della policy se nella richiesta sono presenti parametri di query non definiti nella specifica OpenAPI.
Per consentire la specifica nella richiesta di parametri di query non definiti nella specifica OpenAPI, imposta questo parametro su true. In caso contrario, imposta questo parametro su false per causare l'errore di esecuzione della policy.
| Valore predefinito | true |
| Obbligatorio? | Booleano |
| Tipo | Tipo complesso |
| Elemento principale |
<AllowUnspecifiedParameters>
|
| Elementi secondari | Nessuno |
Sintassi
L'elemento <Query> utilizza la seguente sintassi:
<OASValidation name="policy_name">
<OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Query>[true|false]</Query>
</AllowUnspecifiedParameters>
</Options>
...
</OASValidation>Esempio
L'esempio seguente configura la policy in modo che non vada a buon fine se nella richiesta viene specificato un parametro di query non definito nella specifica OpenAPI.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Query>false</Query>
</AllowUnspecifiedParameters>
</Options>
</OASValidation>Configura il comportamento della policy se nella richiesta sono presenti parametri dei cookie non definiti nella specifica OpenAPI.
Per consentire la specifica nella richiesta di parametri dei cookie non definiti nella specifica OpenAPI, imposta questo parametro su true. In caso contrario, imposta questo parametro su false per causare l'errore di esecuzione della policy.
| Valore predefinito | true |
| Obbligatorio? | Booleano |
| Tipo | Tipo complesso |
| Elemento principale |
<AllowUnspecifiedParameters>
|
| Elementi secondari | Nessuno |
Sintassi
L'elemento <Cookie> utilizza la seguente sintassi:
<OASValidation name="policy_name">
<OASResource>oas://specname[.json|.yaml|.yml]</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Query>[true|false]</Query>
</AllowUnspecifiedParameters>
</Options>
...
</OASValidation>Esempio
L'esempio seguente configura la policy in modo che non vada a buon fine se nella richiesta viene specificato un parametro di query non definito nella specifica OpenAPI.
<OASValidation name="myoaspolicy">
<OASResource>oas://my-spec.yaml</OASResource>
<Options>
<AllowUnspecifiedParameters>
<Cookie>false</Cookie>
</AllowUnspecifiedParameters>
</Options>
</OASValidation><Source>
Messaggio JSON da valutare rispetto agli attacchi ai payload JSON. In genere, questo valore è impostato su request, poiché di solito devi valutare le richieste in entrata dalle app client.
Imposta su response per valutare i messaggi di risposta.
Imposta su message per valutare automaticamente il messaggio di richiesta quando la policy è collegata al flusso di richiesta e il messaggio di risposta quando la policy è collegata al flusso di risposta.
| Valore predefinito | richiesta |
| Obbligatorio? | Facoltativo |
| Tipo | Stringa |
| Elemento principale |
<Source>
|
| Elementi secondari | Nessuno |
Sintassi
L'elemento <Source> utilizza la seguente sintassi:
<OASValidation name="policy_name"> <OASResource>oas://specname[.json|.yaml|.yml]</OASResource> <Source>[message|request|response]</Source> ... </OASValidation>
Esempio
L'esempio seguente valuta automaticamente il messaggio di richiesta quando la policy è collegata al flusso di richiesta e il messaggio di risposta quando la policy è collegata al flusso di risposta:
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Source>message</Source> </OASValidation>
L'elemento <Source> non ha attributi o elementi secondari.
Schemi
Ogni tipo di policy è definito da uno schema XML (.xsd). Per riferimento, gli schemi delle policy sono disponibili su GitHub.
Codici di errore
Questa sezione descrive i codici e i messaggi di errore restituiti e le variabili di errore impostate da Edge quando questo criterio attiva un errore. Queste informazioni sono importanti per sapere se si stanno sviluppando regole di errore per gestire gli errori. Per scoprire di più, consulta gli articoli Cosa devi sapere sugli errori relativi alle norme e Gestione degli errori.
Errori di runtime
Questi errori possono verificarsi quando il criterio viene eseguito.
| Codice di errore | Stato HTTP | Causa | |
|---|---|---|---|
steps.oasvalidation.Failed |
500 | Il corpo del messaggio della richiesta non può essere convalidato in base alla specifica OpenAPI fornita. | |
steps.oasvalidation.SourceMessageNotAvailable |
500 |
La variabile specificata nell'elemento |
|
steps.oasvalidation.NotMessageVariable |
500 |
L'elemento |
build |
Errori di deployment
Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.
| Nome errore | Causa | |
|---|---|---|
ResourceDoesNotExist |
La specifica OpenAPI a cui viene fatto riferimento nell'elemento <OASResource> non esiste.
|
|
ResourceCompileFailed |
La specifica OpenAPI inclusa nel deployment contiene errori che ne impediscono la compilazione. In genere, ciò indica che la specifica non è una specifica OpenAPI 3.0 ben strutturata. | |
BadResourceURL |
Impossibile elaborare la specifica OpenAPI a cui viene fatto riferimento nell'elemento <OASResource>. Questo può accadere se il file non è un file JSON o YAML oppure se l'URL del file non è specificato correttamente.
|
Variabili di errore
Queste variabili vengono impostate quando questo criterio attiva un errore in fase di runtime. Per maggiori informazioni, consulta la sezione Cosa devi sapere sugli errori dei criteri.
| Variabili | Dove | Esempio |
|---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore, come indicato nella tabella Errori di runtime riportata sopra. Il nome del guasto è l'ultima parte del codice di errore. | fault.name Matches "ResourceDoesNotExist" |
oasvalidation.policy_name.failed |
policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. | oasvalidation.myoaspolicy.failed = true |
Funzionalità supportate delle specifiche OpenAPI
La policy OASValidation supporta le funzionalità della specifica OpenAPI riassunte nella tabella seguente, per categoria. Sono elencate anche le funzionalità non supportate.
| Categoria | Supportato | Non supportata |
|---|---|---|
| Formati dei tipi di dati | boolean date date-time double float int32/int64 ipv4/ipv6 md5 sha1/sha256/sha512 string uri uri-template uuid |
binary byte password |
| Oggetto Discriminator | mapping propertyName |
N/D |
| Oggetto tipo di media | schema | encoding example examples |
| Oggetto Operations | parameters requestBody responses security (supporto parziale) |
callbacks deprecated servers |
| Oggetto Parameters | allowEmptyValue in ( query, header, path)required responses schema style ( deepObject, form, formmatrix, label, pipeDelimited, simple, spaceDelimited)Nota: deepObject supporta solo parametri di stringa; gli array e gli oggetti nidificati non sono supportati.
|
allowReserved deprecated example examples content |
| Oggetto Paths | delete get head options parameters patch post put trace variables |
server |
| Oggetto del corpo della richiesta | application/json application/hal+json application/x-www-form-urlencoded (oggetto encoding non supportato)content required |
application/xml multipart/form-data text/plain text/xml |
| Oggetto della risposta | application/json application/hal+json application/x-www-form-urlencoded (oggetto encoding non supportato)content headers |
application/xml links text/plain text/xml |
| Oggetto Responses | default Codice di stato HTTP |
N/D |
| Oggetto di schema | $ref additionalProperties (solo variante flag booleano) allOf (ignorato se additionalProperties è 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 |
| Oggetto Security Scheme | in (header, query) (ignorato se type è http)name type ( apiKey, http)
|
bearerFormat flows openIdConnectUrl scheme |
| Oggetto server | Variabili url |
Più definizioni di server |