Exemple : mise en cache à usage général

Vous consultez la documentation d'Apigee Edge.
Consultez la documentation Apigee X.
en savoir plus

Vous pouvez utiliser des règles pour stocker des données dans un cache à usage général pour accélérer la récupération. Les règles suivantes permettent à votre proxy de stocker et de récupérer des données mises en cache au moment de l'exécution :

Ces règles sont conçues pour la mise en cache générale des données utilisées par vos proxys.

L'exemple de code présenté dans cette rubrique est basé sur l'exemple de proxy OAuth sortant disponible dans GitHub (voir la liste d'exemples). Cet exemple utilise la règle de cache pour stocker un jeton d'accès OAuth à réutiliser dans plusieurs appels sortants.

Chaque type de règle est défini par un schéma XML (.xsd). Pour référence, des schémas de stratégie sont disponibles sur GitHub.

Dans l'exemple suivant, un jeton d'accès OAuth est écrit dans le cache à l'aide d'une règle PopulateCache. Le jeton OAuth est récupéré pour les requêtes ultérieures par une règle LookupCache. Une fois que le jeton d'accès a expiré, JavaScript permet de récupérer un nouveau jeton d'accès, qui est lui-même mis en cache par la règle PopulateCache.

Remplir le cache

Écrivez des données dans le cache à l'aide de la règle PopulateCache. Cet exemple écrit un jeton d'accès OAuth dans le cache. Pour en savoir plus sur cette règle, consultez la page Règle PopulateCache.

<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>

Les variables peuvent être renseignées par des règles ou par du code. La variable Source de cet exemple est renseignée par l'appel JavaScript suivant : context.setVariable('twitter-translate.apiAccessToken', getAccessToken());

Pour en savoir plus sur les clés de cache, consultez la page Utiliser des clés de cache.

Rechercher des données mises en cache

Vous pouvez récupérer les valeurs mises en cache à l'aide de la règle LookupCache. La règle LookupCache suivante lit une valeur de mycache et écrit la valeur dans la variable twitter-translate.apiAccessToken. Pour en savoir plus sur cette règle, consultez la page Règle 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>

Invalider le cache

Le cache peut être invalidé explicitement en spécifiant un en-tête HTTP. Lorsqu'une requête contenant l'en-tête HTTP spécifié est reçue, le cache est vidé. Pour en savoir plus sur cette règle, consultez la page Règle 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>