Esempio: memorizzazione nella cache per uso generico

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Puoi utilizzare i criteri per archiviare i dati in una cache per uso generico e recuperarli più rapidamente. Utilizzando i criteri seguenti, il tuo proxy può archiviare e recuperare i dati memorizzati nella cache in fase di runtime:

Questi criteri sono progettati per la memorizzazione nella cache generale dei dati utilizzati dai proxy.

Il codice campione in questo argomento si basa sul proxy di esempio OAuth in uscita in GitHub (vedi Elenco di esempi). Questo esempio utilizza il criterio della cache per archiviare un token di accesso OAuth da riutilizzare per più chiamate in uscita.

Ogni tipo di criterio è definito da uno schema XML (.xsd). Per riferimento, gli schemi dei criteri sono disponibili su GitHub.

Nell'esempio seguente, un token di accesso OAuth viene scritto nella cache utilizzando un criterio PopulateCache. Il token OAuth per le richieste successive viene recuperato da un criterio LookupCache. Una volta scaduto il token di accesso, JavaScript viene utilizzato per recuperare un nuovo token di accesso, che a sua volta viene memorizzato nella cache dal criterio PopulateCache.

Completa la cache

Utilizza il criterio PopulateCache per scrivere dati nella cache. Questo esempio scrive un token di accesso OAuth nella cache. Per informazioni di riferimento sui criteri, consulta Compilare il criterio della cache.

<PopulateCache name="token-cache">
    <!-- The cache to write to. -->
    <CacheResource>mycache</CacheResource>
    <!-- The source of the data, a variable containing the value. -->
    <Source>twitter-translate.apiAccessToken</Source>
    <!-- An enumeration representing a prefix for namespace scope. -->
    <Scope>Exclusive</Scope>
    <!-- A unique pointer (a flow variable value) to the data. Use this later to retrieve it. -->
    <CacheKey>
        <KeyFragment>apiAccessToken</KeyFragment>
        <KeyFragment ref="request.queryparam.client_id"></KeyFragment>
    </CacheKey>
    <!-- Entries placed into the cache with this policy will expire after 600 seconds. -->
    <ExpirySettings>
        <TimeoutInSec>600</TimeoutInSec>
    </ExpirySettings>
</PopulateCache>

Le variabili possono essere completate tramite criteri o codice. La variabile Source in questo esempio viene compilata dalla seguente chiamata JavaScript: context.setVariable('twitter-translate.apiAccessToken', getAccessToken());

Per ulteriori informazioni sulle chiavi cache, consulta Utilizzo delle chiavi cache.

Ricerca di dati memorizzati nella cache

Puoi recuperare i valori memorizzati nella cache con il criterio LookupCache. Il seguente criterio LookupCache legge un valore da mycache e scrive il valore nella variabile twitter-translate.apiAccessToken. Per informazioni di riferimento sui criteri, consulta la pagina relativa al criterio LookupCache.

<LookupCache name="token-cache">
    <!-- The cache to read from. -->
    <CacheResource>mycache</CacheResource>
    <!-- Where to assign the retrieved value - here, a variable. -->
    <AssignTo>twitter-translate.apiAccessToken</AssignTo>
    <!-- An enumeration representing a prefix for namespace scope. -->
    <Scope>Exclusive</Scope>
    <!-- The unique pointer (a flow variable value) that was used to store the data in the cache. -->

    <CacheKey>
        <KeyFragment>apiAccessToken</KeyFragment>
        <KeyFragment ref="request.queryparam.client_id"></KeyFragment>
    </CacheKey>
</LookupCache>

Annulla la convalida della cache

La validità della cache può essere annullata in modo esplicito specificando un'intestazione HTTP. Quando viene ricevuta una richiesta contenente l'intestazione HTTP specificata, la cache viene svuotata. Per informazioni di riferimento sui criteri, consulta la pagina relativa al criterio InvalidateCache.

<InvalidateCache name="InvalidateMyCache">
    <!-- The cache to invalidate. -->
    <CacheResource>test-cache</CacheResource>
    <!-- An enumeration representing a prefix for namespace scope. -->
    <Scope>Exclusive</Scope>
    <!-- Fragments constructing the unique pointer used when 
        the data was put into the cache. -->
    <CacheKey>
        <KeyFragment>apiAccessToken</KeyFragment>
        <KeyFragment ref="request.queryparam.client_id" />
    </CacheKey>
    <PurgeChildEntries>true</PurgeChildEntries>
</InvalidateCache>