Beispiel: Caching für allgemeine Zwecke

Sie sehen die Dokumentation zu Apigee Edge.
Sehen Sie sich die Apigee X-Dokumentation an.
info

Sie können Richtlinien verwenden, um Daten für einen schnelleren Abruf im allgemeinen Cache zu speichern. Mit den folgenden Richtlinien kann Ihr Proxy im Cache gespeicherte Daten zur Laufzeit speichern und abrufen:

Diese Richtlinien sind für das allgemeine Caching von Daten vorgesehen, die von Ihren Proxys verwendet werden.

Der Beispielcode in diesem Thema basiert auf dem ausgehenden OAuth-Beispielproxy in GitHub (siehe Stichprobenliste) enthalten. In diesem Beispiel wird mit der Cache-Richtlinie ein OAuth-Zugriffstoken gespeichert, um es bei mehreren ausgehenden Aufrufen wiederzuverwenden.

Jeder Richtlinientyp wird durch ein XML-Schema (.xsd) definiert. Zu Referenzzwecken sind Richtlinienschemas auf GitHub verfügbar.

Im folgenden Beispiel wird ein OAuth-Zugriffstoken mithilfe einer PopulateCache-Richtlinie in den Cache geschrieben. Das OAuth-Token wird für nachfolgende Anfragen von einer LookupCache-Richtlinie abgerufen. Sobald das Zugriffstoken abläuft, wird JavaScript verwendet, um ein neues Zugriffstoken abzurufen, das wiederum von der PopulateCache-Richtlinie im Cache gespeichert wird.

Cache leeren

Verwenden Sie die Richtlinie "PopulateCache", um Daten in den Cache zu schreiben. In diesem Beispiel wird ein OAuth-Zugriffstoken in den Cache geschrieben. Richtlinienreferenzen finden Sie unter Cache-Richtlinie ausfüllen.

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

Variablen können mit Richtlinien oder Code ausgefüllt werden. Die Variable Source wird in diesem Beispiel durch den folgenden JavaScript-Aufruf gefüllt: context.setVariable('twitter-translate.apiAccessToken', getAccessToken());

Weitere Informationen zu Cache-Schlüsseln finden Sie unter Mit Cache-Schlüsseln arbeiten.

Im Cache gespeicherte Daten suchen

Sie können im Cache gespeicherte Werte mit der LookupCache-Richtlinie abrufen. Die folgende LookupCache-Richtlinie liest einen Wert aus mycache und schreibt den Wert in die Variable twitter-translate.apiAccessToken. Informationen zur Richtlinienreferenz finden Sie unter LookupCache-Richtlinie.

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

Cache entwerten

Der Cache kann explizit entschlüsselt werden, indem ein HTTP-Header angegeben wird. Wenn eine Anfrage mit dem angegebenen HTTP-Header empfangen wird, wird der Cache geleert. Informationen zur Richtlinienreferenz finden Sie unter InvalidateCache-Richtlinie.

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