Criterio OASValidation

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Informazioni sulle norme OASValidation

Il criterio OASValidation (OpenAPI Specification Validation) consente di convalidare un messaggio di richiesta o risposta in entrata in base a una specifica OpenAPI 3.0 (JSON o YAML). Consulta la sezione Quali contenuti vengono convalidati?

Il criterio OASValidation specifica il nome della specifica OpenAPI da utilizzare per la convalida quando viene eseguito il passaggio a cui è collegato il criterio. La specifica OpenAPI è 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 proxy API utilizzando la UI o l'API, come descritto in Gestire le risorse.

Quali contenuti vengono convalidati?

La seguente tabella riepiloga i contenuti del messaggio di richiesta convalidati dal criterio OASValidation, per componente.

Componenti Richiedi convalida
Basepath Convalida il basepath definito dal proxy API; ignora il basepath specificato nella specifica OpenAPI.
Percorso Verifica che il percorso della richiesta (meno il percorso di base) corrisponda a uno dei pattern di percorso definiti nella specifica OpenAPI.
Verbo Verifica che il verbo sia definito per il percorso nella specifica OpenAPI.
Corpo del messaggio di richiesta
  • Verifica l'esistenza del corpo del messaggio nella richiesta, se necessario.
  • (Facoltativo) Valida il corpo del messaggio in base allo schema del corpo della richiesta dell'operazione nella Specifica OpenAPI. Configura questa opzione utilizzando <ValidateMessageBody>

Nota:il criterio convalida il corpo di un messaggio di richiesta in base alla specifica OpenAPI solo se Content-Type è impostato su application/json. Se il tipo di contenuto non è impostato su application/json, la convalida del corpo del messaggio di richiesta verrà superata automaticamente (senza convalidare effettivamente il contenuto).

Parametri
  • Verifica che i parametri obbligatori siano presenti nella richiesta, inclusi i parametri di percorso, intestazione, query e cookie.
  • Verifica che i valori dei parametri corrispondano a quelli definiti nella specifica OpenAPI.
  • (Facoltativo) Convalida l'esistenza nella richiesta di parametri non definiti nella specifica OpenAPI. Configura questa opzione utilizzando <AllowUnspecifiedParameters>

La seguente tabella riassume i contenuti del messaggio di risposta convalidati dal criterio OASValidation, per componente.

Componenti Convalida della risposta
Percorso Verifica che il percorso della richiesta (meno il percorso di base) corrisponda a uno dei pattern di percorso definiti nella specifica OpenAPI.
Verbo Verifica che il verbo sia definito per il percorso nella specifica OpenAPI.
Corpo del messaggio di risposta
  • Convalida l'esistenza del corpo del messaggio nella risposta, se necessario.
  • Verifica che le intestazioni della risposta nella specifica OpenAPI siano presenti nel messaggio di risposta e che il valore delle intestazioni della risposta corrisponda allo schema.
  • Se vuoi, convalida il corpo del messaggio in base allo schema del corpo della risposta dell'operazione nella Specifica OpenAPI. Configura questa opzione utilizzando <ValidateMessageBody>

Esempi

I seguenti esempi mostrano alcuni dei modi in cui puoi utilizzare il criterio OASValidation per convalidare i messaggi in base a una specifica OpenAPI 3.0.

Convalida del messaggio di richiesta

Nell'esempio seguente, il criterio 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

Il seguente esempio configura la policy in modo che non riesca se nella richiesta viene specificato un parametro di intestazione, query o cookie che 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 il criterio di convalida della specifica OpenAPI.

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>

Norme predefinite

Il seguente esempio mostra le impostazioni predefinite quando aggiungi una norma di convalida OAS al flusso nell'interfaccia utente 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 name può contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può contenere più di 255 caratteri.

Facoltativamente, utilizza l'elemento <DisplayName> per etichettare il criterio nell'editor del proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.

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 all'elemento secondario

Questa sezione descrive gli elementi secondari di <OASValidation>.

<DisplayName>

Utilizza questo attributo in aggiunta all'attributo name per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso e più naturale.

L'elemento <DisplayName> è comune a tutti i criteri.

Valore predefinito n/a
Obbligatorio? (Facoltativo) Se ometti <DisplayName>, viene utilizzato il valore dell'attributo name del criterio.
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 da convalidare. Puoi archiviare questo file:

  • Nell'ambito del proxy API in /apiproxy/resources/oas nel pacchetto del proxy API
  • Nella sezione Resources della visualizzazione Navigator dell'editor del proxy API.

Per saperne di più, consulta Gestire 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 ulteriori informazioni, vedi 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

Il seguente esempio 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.

<Opzioni>

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 in modo più dettagliato 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 in base allo schema del corpo della richiesta dell'operazione nella specifica OpenAPI. Imposta su true per convalidare i contenuti del corpo del messaggio. Imposta il valore 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 falso
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 del criterio se nella richiesta sono presenti parametri di intestazione, query o cookie che non sono 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

Il seguente esempio configura la policy in modo che non riesca se nella richiesta viene specificato un parametro di intestazione, query o cookie che 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>

Configura il comportamento del criterio se nella richiesta sono presenti parametri di intestazione non definiti nella specifica OpenAPI.

Per consentire la specifica dei parametri di intestazione nella richiesta che non sono definiti nella specifica OpenAPI, imposta questo parametro su true. In caso contrario, imposta questo parametro su false per impedire l'esecuzione del criterio.

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 del criterio 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 impedire l'esecuzione del criterio.

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 del criterio 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 impedire l'esecuzione del criterio.

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 in base agli attacchi al payload JSON. Questo valore è in genere impostato su request, in quanto in genere è necessario 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 il criterio è collegato al flusso di richiesta e il messaggio di risposta quando il criterio è collegato 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

Il seguente esempio 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 <Source> del criterio non rientra nell'ambito o non può essere risolta.

steps.oasvalidation.NotMessageVariable 500

L'elemento <Source> è impostato su una variabile non di tipo message.

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

Il criterio OASValidation supporta le funzionalità della specifica OpenAPI riepilogate nella tabella seguente, per categoria. Sono elencate anche le funzionalità non supportate.

Categoria Supportato Non supportata
Formati dei tipi di dati booleano
data
data e ora
double
email
float
int32/int64
ipv4/ipv6
md5
sha1/sha256/sha512
string
uri
uri-template
uuid
binary
byte
password
Oggetto discriminatore mapping
propertyName
N/D
Oggetto tipo di media schema codifica
esempio
esempi
Oggetto Operations parametri
requestBody
responses
security (supporto parziale)
callback
ritirati
server
Oggetto parametri allowEmptyValue
in (query, header, path)
required
responses
schema
style (deepObject, form, formmatrix, label, pipeDelimited, simple, spaceDelimited)

Nota: deepObject supporta solo i parametri stringa; array e oggetti nidificati non sono supportati.
allowReserved
deprecated
example
examples
content
Oggetto Percorsi 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 Response 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 schema $ref
additionalProperties (solo variante del 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 schema di sicurezza in (header, query) (ignorato se type è http)
name
type (apiKey, http)
bearerFormat
flows
openIdConnectUrl
scheme
Oggetto server url
variables
Definizioni di più server

Argomenti correlati