Questa pagina si applica ad Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
Questa norma memorizza nella cache i dati di una risorsa di backend, riducendo il numero di richieste alla risorsa. Quando le app inviano richieste allo stesso URI, puoi utilizzare questo criterio per restituire risposte memorizzate nella cache anziché inoltrare le richieste al server di backend. Il criterio ResponseCache può migliorare le prestazioni della tua API riducendo la latenza e il traffico di rete.
Queste norme sono estensibili e il loro utilizzo potrebbe avere implicazioni in termini di costi o di utilizzo, a seconda della licenza Apigee. Per informazioni sui tipi di criteri e sulle implicazioni di utilizzo, consulta Tipi di criteri.
Probabilmente troverai ResponseCache più utile quando i dati di backend utilizzati dall'API vengono aggiornati solo periodicamente. Ad esempio, supponiamo di avere un'API che espone i dati dei bollettini meteo aggiornati solo ogni dieci minuti. Utilizzando ResponseCache per restituire le risposte memorizzate nella cache tra gli aggiornamenti, puoi ridurre il numero di richieste che raggiungono il backend. In questo modo si riduce anche il numero di hop di rete.
Per la memorizzazione nella cache a breve termine per uso generico, valuta la possibilità di utilizzare il criterio PopulateCache. Questo criterio viene utilizzato insieme al criterio LookupCache (per la lettura delle voci della cache) e al criterio InvalidateCache (per l'invalidazione delle voci).
Guarda il seguente video per un'introduzione alle norme relative alla cache delle risposte.
Esempi
Cache di 10 minuti
Questo esempio mostra come mantenere le risposte memorizzate nella cache per 10 minuti.
Immagina di avere un'API al seguente URL:
http://{org_name}-test.apigee.net/weather/forecastrss?w=23424778
Stai utilizzando il parametro di query w
come chiave cache. Apigee verifica il valore del parametro di query w
ogni volta che viene ricevuta una richiesta. Se nella cache è presente una risposta valida (ovvero non scaduta), il messaggio di risposta memorizzato nella cache viene restituito al client richiedente.
Ora immagina di aver configurato una policy ResponseCache come segue.
<ResponseCache name="ResponseCache"> <CacheKey> <KeyFragment ref="request.queryparam.w" /> </CacheKey> <ExpirySettings> <TimeoutInSeconds>600</TimeoutInSeconds> </ExpirySettings> </ResponseCache>
La prima volta che il proxy API riceve un messaggio di richiesta per il seguente URL, la risposta viene memorizzata nella cache. Nella seconda richiesta entro 10 minuti, viene eseguita una ricerca nella cache e la risposta memorizzata nella cache viene restituita all'app senza che la richiesta venga inoltrata al servizio di backend.
http://{org_name}-test.apigee.net/weather/forecastrss?w=23424778
Salta la ricerca nella cache
Il seguente esempio mostra come ignorare la ricerca nella cache e aggiornarla. Vedi anche questo video sull'utilizzo di SkipCacheLookup.
La condizione facoltativa SkipCacheLookup (se configurata) viene valutata nel percorso della richiesta. Se la condizione restituisce il valore true, la ricerca nella cache viene ignorata e la cache viene aggiornata.
Un utilizzo comune dell'aggiornamento condizionale della cache è una condizione che definisce un'intestazione HTTP specifica che fa sì che la condizione venga valutata come vera. Un'applicazione client basata su script potrebbe essere configurata per inviare periodicamente una richiesta con l'intestazione HTTP appropriata, causando esplicitamente l'aggiornamento della cache delle risposte.
Ad esempio, immagina una chiamata a un'API al seguente URL:
'http://{org_name}-test.apigee.net/weather/forecastrss?w=23424778' -H "bypass-cache:true"
Ora immagina la seguente norma ResponseCache configurata su questo proxy. Tieni presente che la condizione bypass-cache è impostata su true.
<ResponseCache name="ResponseCache"> <CacheKey> <KeyFragment ref="request.queryparam.w" /> </CacheKey> <!-- Explicitly refresh the cached response --> <SkipCacheLookup>request.header.bypass-cache = "true"</SkipCacheLookup> <ExpirySettings> <TimeoutInSeconds>600</TimeoutInSeconds> </ExpirySettings> </ResponseCache>
Per ulteriori informazioni sulle condizioni, consulta la sezione Variabili e condizioni del flusso.
Riferimento elemento
Il riferimento all'elemento descrive gli elementi e gli attributi delle norme.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1"> <DisplayName>Response Cache 1</DisplayName> <Properties/> <CacheKey> <Prefix/> <KeyFragment ref="request.uri" /> </CacheKey> <Scope>Exclusive</Scope> <ExpirySettings> <ExpiryDate/> <TimeOfDay/> <TimeoutInSeconds ref="flow.variable.here">300</TimeoutInSeconds> </ExpirySettings> <CacheResource>cache_to_use</CacheResource> <CacheLookupTimeoutInSeconds/> <ExcludeErrorResponse/> <SkipCacheLookup/> <SkipCachePopulation/> <UseAcceptHeader/> <UseResponseCacheHeaders/> </ResponseCache>
Attributi <ResponseCache>
<ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
La tabella seguente descrive gli attributi comuni a tutti gli elementi principali dei criteri:
Attributo | Descrizione | Predefinito | Presence |
---|---|---|---|
name |
Il nome interno del criterio. Il valore dell'attributo Se vuoi, utilizza l'elemento |
N/D | Obbligatorio |
continueOnError |
Imposta su Imposta su |
falso | Facoltativo |
enabled |
Imposta su Imposta su |
true | Facoltativo |
async |
Questo attributo è stato ritirato. |
falso | Deprecato |
Elemento <DisplayName>
Da utilizzare insieme all'attributo name
per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.
<DisplayName>Policy Display Name</DisplayName>
Predefinito |
N/D Se ometti questo elemento, viene utilizzato il valore dell'attributo |
---|---|
Presence | Facoltativo |
Tipo | Stringa |
Elemento <CacheKey>
Configura un puntatore univoco a un insieme di dati memorizzati nella cache.
Le chiavi della cache sono limitate a una dimensione di 2 KB.
<CacheKey> <Prefix>string</Prefix> <KeyFragment ref="variable_name" /> <KeyFragment>literal_string</KeyFragment> </CacheKey>
Predefinito: |
N/D |
Presenza: |
Obbligatorio |
Tipo: |
N/D |
<CacheKey>
crea il nome di ogni dato memorizzato nella cache.
La chiave viene spesso impostata utilizzando un valore delle intestazioni delle entità o dei parametri di query. In questi casi, l'attributo ref dell'elemento specifica una variabile contenente il valore della chiave.
In fase di runtime, i valori di <KeyFragment>
vengono anteposti al valore dell'elemento <Scope>
o al valore di <Prefix>
. Ad esempio, i
seguenti generano una chiave della cache
UserToken__apiAccessToken__
<value_of_client_id>:
<CacheKey> <Prefix>UserToken</Prefix> <KeyFragment>apiAccessToken</KeyFragment> <KeyFragment ref="request.queryparam.client_id" /> </CacheKey>
Utilizzi l'elemento <CacheKey>
in combinazione con
<Prefix>
e <Scope>
. Per maggiori informazioni, consulta Utilizzo delle chiavi della cache.
Elemento <CacheLookupTimeoutInSeconds>
Specifica il numero di secondi dopo i quali una ricerca nella cache senza esito positivo verrà considerata un fallimento della cache. In questo caso, il flusso riprende lungo il percorso di mancato riscontro nella cache.
<CacheLookupTimeoutInSeconds>30</CacheLookupTimeoutInSeconds>
Predefinito: |
30 |
Presenza: |
Facoltativo |
Tipo: |
Numero intero |
Elemento <CacheResource>
Specifica la cache in cui devono essere archiviati i messaggi. Ometti questo elemento per utilizzare la cache condivisa
inclusa. Devi specificare un CacheResource
per nome se vuoi poter
cancellare amministrativamente le voci contenute nella cache. Per saperne di più, consulta l'API Caches.
<CacheResource>cache_to_use</CacheResource>
Predefinito: |
N/D |
Presenza: |
Facoltativo |
Tipo: |
Stringa |
Elemento <CacheKey>/<KeyFragment>
Specifica un valore da includere nella chiave cache, creando uno spazio dei nomi per la corrispondenza tra le richieste e le risposte memorizzate nella cache.
<KeyFragment ref="variable_name"/> <KeyFragment>literal_string</KeyFragment>
Predefinito: |
N/D |
Presenza: |
Facoltativo |
Tipo: |
N/D |
Può trattarsi di una chiave (un nome statico che fornisci) o di un valore (una voce dinamica impostata facendo riferimento a una variabile). Tutti i frammenti specificati combinati (più il prefisso) vengono concatenati per creare la chiave della cache.
<KeyFragment>apiAccessToken</KeyFragment> <KeyFragment ref="request.queryparam.client_id" />
Utilizzi l'elemento <KeyFragment>
in combinazione con
<Prefix>
e <Scope>
. Per maggiori informazioni, consulta Utilizzo delle chiavi della cache.
Attributi
Attributo | Tipo | Predefinito | Obbligatorio | Descrizione |
---|---|---|---|---|
ref | string | No |
La variabile da cui ottenere il valore. Non deve essere utilizzato se questo elemento contiene un valore letterale. |
Elemento <CacheKey>/<Prefix>
Specifica un valore da utilizzare come prefisso della chiave cache.
<Prefix>prefix_string</Prefix>
Predefinito: |
N/D |
Presenza: |
Facoltativo |
Tipo: |
Stringa |
Utilizza questo valore anziché <Scope>
quando vuoi specificare un valore personalizzato
anziché un valore enumerato <Scope>
. Se definito,
<Prefix>
antepone il valore della chiave della cache alle voci scritte nella cache. Un valore dell'elemento <Prefix>
sostituisce un valore dell'elemento <Scope>
.
Utilizzi l'elemento <Prefix>
in combinazione con
<CacheKey>
e <Scope>
. Per maggiori informazioni, consulta Utilizzo delle chiavi della cache.
Elemento <ExcludeErrorResponse>
Questa norma può memorizzare nella cache le risposte HTTP con qualsiasi codice di stato. Ciò significa che sia le risposte di successo che quelle di errore possono essere memorizzate nella cache, inclusi i codici di stato 2xx e 3xx.
Imposta questo elemento su true
(impostazione predefinita) per escludere le risposte di errore. Impostalo su
false
se non vuoi escludere le risposte della destinazione della cache
con codici di stato di errore HTTP.
Per una discussione sui pattern della cache delle risposte in cui questo elemento è utile, vedi Introduzione agli antipattern.
<ExcludeErrorResponse>true</ExcludeErrorResponse>
Predefinito: |
true |
Presenza: |
Facoltativo |
Tipo: |
Booleano |
Elemento <ExpirySettings>
Specifica la scadenza di una voce della cache. Se presente, <TimeoutInSeconds>
ha la precedenza su <TimeOfDay>
e <ExpiryDate>
.
<ExpirySettings> <TimeOfDay ref="time_variable">expiration_time</TimeOfDay> <TimeoutInSeconds ref="duration_variable">seconds_until_expiration</TimeoutInSeconds> <ExpiryDate ref="date_variable">expiration_date</ExpiryDate> </ExpirySettings>
Predefinito: |
N/D |
Presenza: |
Obbligatorio |
Tipo: |
N/D |
<ExpirySettings>/<ExpiryDate> element
Specifica la data di scadenza di una voce della cache. Utilizza il modulo mm-dd-yyyy
.
Se presente, l'elemento di pari livello <TimeoutInSeconds>
di questo elemento esegue l'override di
<ExpiryDate>
.
<ExpirySettings> <ExpiryDate ref="{date_variable}">expiration_date</ExpiryDate> </ExpirySettings>
Predefinito: |
N/D |
Presenza: |
Facoltativo |
Tipo: |
Stringa |
Attributi
<ExpiryDate ref="" />
Attributo | Descrizione | Predefinito | Presenza | Tipo |
---|---|---|---|---|
ref |
La variabile da cui ottenere il valore. Non deve essere utilizzato se questo elemento contiene un valore letterale. |
N/D | Facoltativo | Stringa |
Elemento <ExpirySettings>/<TimeOfDay>
L'ora del giorno in cui una voce della cache deve scadere. Utilizza il modulo hh:mm:ss
.
Se presente, l'elemento di pari livello <TimeoutInSeconds>
di questo elemento esegue l'override di
<TimeOfDay>
.
Inserisci l'ora del giorno nel formato HH:mm:ss, dove HH rappresenta l'ora in un orologio a 24 ore. Ad esempio, 14:30:00 per le 14:30.
Per l'ora del giorno, le impostazioni internazionali e il fuso orario predefiniti variano a seconda di dove viene eseguito il codice (che non è noto quando configuri il criterio).
<ExpirySettings> <TimeOfDay ref="time_variable">expiration_time</TimeOfDay> </ExpirySettings>
Predefinito: |
N/D |
Presenza: |
Facoltativo |
Tipo: |
Stringa |
Attributi
Attributo | Descrizione | Predefinito | Presenza | Tipo |
---|---|---|---|---|
ref | Variabile con il valore del tempo di scadenza. | N/D | Facoltativo | Stringa |
Elemento <ExpirySettings>/<TimeoutInSec>
Il numero di secondi dopo i quali una voce della cache deve scadere.
Elemento <ExpirySettings>/<TimeoutInSeconds>
Il numero di secondi dopo i quali una voce della cache deve scadere. Se presente, questo elemento
sovrascrive i relativi elementi di pari livello, <TimeOfDay>
e <ExpiryDate>
.
<ExpirySettings> <TimeoutInSeconds ref="duration_variable">seconds_until_expiration</TimeoutInSeconds> </ExpirySettings>
Predefinito: |
N/D |
Presenza: |
Facoltativo |
Tipo: |
Stringa |
Attributi
Attributo | Descrizione | Predefinito | Presenza | Tipo |
---|---|---|---|---|
ref | Variabile con il valore di timeout. |
N/D
|
Facoltativo | Stringa |
Elemento <Scope>
Enumerazione utilizzata per creare un prefisso per una chiave della cache quando un elemento <Prefix>
non viene fornito nell'elemento <CacheKey>
.
<Scope>scope_enumeration</Scope>
Predefinito: |
"Esclusiva" |
Presenza: |
Facoltativo |
Tipo: |
Stringa |
L'impostazione <Scope>
determina una chiave della cache anteposta in base al valore <Scope>
. Ad esempio, una chiave della cache assume il seguente formato quando
l'ambito è impostato su Exclusive
:
orgName__envName__apiProxyName__proxy|TargetName__ [
serializedCacheKey ].
Se in <CacheKey>
è presente un elemento <Prefix>
, questo
ha la precedenza su un valore dell'elemento <Scope>
. I valori validi includono le enumerazioni
di seguito.
Utilizzi l'elemento <Scope>
in combinazione con
<CacheKey>
e <Prefix>
. Per maggiori informazioni, consulta Utilizzo delle chiavi della cache.
Valori accettabili
Valore dell'ambito | Descrizione |
---|---|
Global |
La chiave della cache è condivisa tra tutti i proxy API di cui è stato eseguito il deployment nell'ambiente. La chiave della cache viene anteposta nel formato orgName __ envName __. Se definisci una voce |
Application |
Il nome del proxy API viene utilizzato come prefisso. La chiave della cache viene anteposta nel formato orgName__envName__apiProxyName. |
Proxy |
La configurazione ProxyEndpoint viene utilizzata come prefisso. La chiave della cache viene anteposta nel formato orgName__envName__apiProxyName__proxyEndpointName . |
Target |
La configurazione TargetEndpoint viene utilizzata come prefisso. Chiave della cache anteposta nel formato orgName__envName__apiProxyName__targetEndpointName . |
Exclusive |
Valore predefinito. Questo è il più specifico e quindi presenta un rischio minimo di collisioni di spazi dei nomi all'interno di una determinata cache. Il prefisso può avere due forme:
Chiave della cache anteposta nel modulo orgName__envName__apiProxyName__proxyNameITargetName Ad esempio, la stringa completa potrebbe avere il seguente aspetto: apifactory__test__weatherapi__default__apiAccessToken |
Elemento <SkipCacheLookup>
Definisce un'espressione che, se restituisce true in fase di runtime, specifica che la ricerca nella cache
deve essere ignorata e la cache deve essere aggiornata. Vedi anche
Video sull'utilizzo delle norme ResponseCache sull'utilizzo di SkipCacheLookup
.
<SkipCacheLookup>variable_condition_expression</SkipCacheLookup>
Predefinito: |
N/D |
Presenza: |
Facoltativo |
Tipo: |
Stringa |
Dall'esempio seguente, se la variabile bypass-cache è impostata su true in un'intestazione in entrata, la ricerca nella cache viene ignorata e la cache viene aggiornata.
<SkipCacheLookup>request.header.bypass-cache = "true"</SkipCacheLookup>
Elemento <SkipCachePopulation>
Definisce un'espressione che, se restituisce true in fase di runtime, specifica che una scrittura nella
cache deve essere ignorata. Guarda anche questo
video sull'utilizzo di SkipCachePopulation
.
<SkipCachePopulation>variable_condition_expression</SkipCachePopulation>
Predefinito: |
N/D |
Presenza: |
Facoltativo |
Tipo: |
Stringa |
Ad esempio, il seguente codice salterebbe la scrittura della cache se il codice di stato della risposta fosse 400 o superiore:
<SkipCachePopulation>response.status.code >= 400</SkipCachePopulation>
Elemento <UseAcceptHeader>
Imposta su true
per aggiungere alla chiave della cache di una voce della cache di risposta i valori delle intestazioni Accept della risposta.
Apigee utilizza le intestazioni delle richieste Accept
, Accept-Encoding
, Accept-Language
e Accept-Charset
durante il calcolo della chiave della cache. Questo approccio
impedisce a un client di ottenere un tipo di media che non ha richiesto.
Ad esempio, considera il caso in cui arrivano due richieste dallo stesso URL, dove la prima richiesta accetta gzip e la seconda no. La prima richiesta verrà memorizzata nella cache e la voce memorizzata nella cache (probabilmente) sarà una risposta compressa con gzip. La seconda richiesta leggerà il valore memorizzato nella cache e potrebbe quindi restituire una voce compressa con gzip a un client che non è in grado di leggere gzip.
Per saperne di più, consulta Configurazione di una chiave della cache.
<UseAcceptHeader>false</UseAcceptHeader>
Predefinito: |
falso |
Presenza: |
Facoltativo |
Tipo: |
Booleano |
Elemento <UseResponseCacheHeaders>
Imposta true
per considerare le intestazioni di risposta HTTP quando imposti la durata (TTL) della risposta nella cache. Se questo valore è true, Apigee considera i valori delle
seguenti intestazioni di risposta, confrontandoli con quelli impostati da
<ExpirySettings>
quando imposta il time to live:
Cache-Control s-maxage
Cache-Control max-age
Expires
Per ulteriori dettagli, consulta la sezione Impostare la scadenza delle voci della cache.
<UseResponseCacheHeaders>false</UseResponseCacheHeaders>
Predefinito: |
falso |
Presenza: |
Facoltativo |
Tipo: |
Booleano |
Note sull'utilizzo
La dimensione massima di ogni oggetto memorizzato nella cache è 256 kB. (Per informazioni dettagliate su come Apigee elabora la cache, vedi Elementi interni della cache.)
Tramite la configurazione nella policy ResponseCache, puoi fare in modo che Apigee includa le intestazioni della risposta HTTP nell'impostazione della scadenza delle voci della cache e delle chiavi della cache. Questa sezione descrive come utilizzare i criteri con le intestazioni per gestire la scadenza della cache e le chiavi della cache.
Per saperne di più su come Apigee gestisce le intestazioni delle risposte con il criterio ResponseCache, consulta Supporto per le intestazioni della risposta HTTP.
Impostazione della scadenza delle voci della cache
Come per il criterio PopolateCache, puoi impostare la scadenza di una voce della cache delle risposte (il relativo tempo di permanenza) utilizzando l'elemento
<ExpirySettings>
. Nella norma ResponseCache, puoi anche fare in modo che Apigee
prenda in considerazione le intestazioni della risposta quando sono presenti.
Per utilizzare le intestazioni di risposta, imposta il valore dell'elemento <UseResponseCacheHeaders>
su
true. Questa impostazione fa sì che Apigee prenda in considerazione le intestazioni della risposta, le confronti con il valore impostato
da <ExpirySettings>
e utilizzi il valore più basso tra i due. Quando
considera le intestazioni della risposta, Apigee sceglie il valore disponibile come descritto di seguito:
Ad esempio, supponiamo che una risposta venga memorizzata nella cache con i seguenti valori:
- Nessun valore
Cache-Control s-maxage
- Un valore
Cache-Control max-age
di 300 - Una data
Expires
tra tre giorni - Un valore
<ExpirySettings>
TimeoutInSeconds
di 600.
In questo caso, il valore Cache-Control
max-age
verrà utilizzato per il TTL perché è inferiore al valore <ExpirySettings>
e perché non è presente alcun valore Cache-Control s-maxage
(che ha la precedenza su max-age
).
Configurazione di una chiave della cache
Come per le norme di memorizzazione nella cache per uso generico, ad esempio la norma PopulateCache, con
ResponseCache utilizzi gli elementi <CacheKey>
e <Scope>
per
configurare la creazione delle chiavi della cache per le voci della cache. Con ResponseCache puoi anche rendere le chiavi della cache
più significative aggiungendo le intestazioni Accept della risposta ai valori delle chiavi.
Per informazioni generali sulla configurazione delle chiavi di cache, consulta Utilizzo delle chiavi di cache. Per
informazioni sull'utilizzo delle intestazioni Accept, vedi <UseAcceptHeader>
.
Informazioni sulla crittografia della cache
Apigee e Apigee hybrid (versione 1.4 e successive): i dati di cache e KVM sono sempre criptati.
Variabili di flusso
Le seguenti variabili di flusso predefinite vengono compilate quando viene eseguita una norma ResponseCache. Per ulteriori informazioni sulle variabili di flusso, consulta Riferimento alle variabili di flusso.
Variabili | Tipo | Autorizzazione | Descrizione |
---|---|---|---|
responsecache.{policy_name}.cachename |
Stringa | Sola lettura | Restituisce la cache utilizzata nella policy |
responsecache.{policy_name}.cachekey |
Stringa | Sola lettura | Restituisce la chiave utilizzata |
responsecache.{policy_name}.cachehit |
Booleano | Sola lettura | Vero se l'esecuzione del criterio è riuscita |
responsecache.{policy_name}.invalidentry |
Booleano | Sola lettura | Vero se la voce della cache non è valida |
Codici di errore
Questa sezione descrive i messaggi di errore e le variabili di flusso impostate quando questo criterio attiva un errore. Queste informazioni sono importanti se stai sviluppando regole di errore per un proxy. Per scoprire di più, consulta Informazioni importanti sugli errori relativi alle norme e Gestione degli errori.
Prefisso del codice di errore
N/D
Errori di runtime
Questo criterio non genera errori di runtime.
Errori di deployment
Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.
Nome dell'errore | Causa | Correggi |
---|---|---|
InvalidTimeout |
Se l'elemento <CacheLookupTimeoutInSeconds> del criterio ResponseCache è impostato su un numero negativo, il deployment del proxy API non va a buon fine. |
build |
InvalidCacheResourceReference |
Questo errore si verifica se l'elemento <CacheResource> in un criterio ResponseCache è impostato su un
nome che non esiste nell'ambiente in cui viene eseguito il deployment del proxy API. |
build |
ResponseCacheStepAttachmentNotAllowedReq |
Questo errore si verifica se lo stesso criterio ResponseCache è associato a più percorsi di richiesta all'interno di qualsiasi flusso di un proxy API. |
build |
ResponseCacheStepAttachmentNotAllowedResp |
Questo errore si verifica se lo stesso criterio ResponseCache è associato a più percorsi di risposta
all'interno di qualsiasi flusso di un proxy API. |
build |
InvalidMessagePatternForErrorCode |
Questo errore si verifica se l'elemento <SkipCacheLookup> o <SkipCachePopulation>
in un criterio ResponseCache contiene una condizione non valida. |
build |
CacheNotFound |
Questo errore si verifica se la cache specifica indicata nel messaggio di errore non è stata creata su un componente di elaborazione dei messaggi specifico. | build |
Variabili di errore
N/D
Esempio di risposta di errore
N/D
Schema
Ogni tipo di policy è definito da uno schema XML (.xsd
). Per riferimento, gli schemi delle policy
sono disponibili su GitHub.