Compartir a través de


Obtención desde memoria caché

SE APLICA A: todos los niveles de API Management

Use la directiva cache-lookup para realizar una consulta en la caché y devolver una respuesta en caché válida cuando esté disponible. Esta directiva se puede aplicar en aquellos casos en los que el contenido de respuesta permanezca estático durante un período de tiempo. El almacenamiento en caché de respuesta reduce el ancho de banda y los requisitos de procesamiento impuestos sobre el servidor web de back-end y disminuye la latencia percibida por los consumidores de API.

Nota

Esta directiva debe tener una directiva Store to cache (Almacenar en la caché) correspondiente.

Importante

La caché integrada es volátil y se comparte entre todas las unidades de la misma región del mismo servicio de API Management.

Nota:

Establezca los elementos de la directiva y los elementos secundarios en el orden proporcionado en la instrucción de directiva. Para que pueda configurar esta directiva, el portal proporciona un editor guiado basado en formularios. Obtenga más información sobre el establecimiento o modificación de directivas de API Management.

Instrucción de la directiva

<cache-lookup vary-by-developer="true | false" vary-by-developer-groups="true | false" caching-type="prefer-external | external | internal" downstream-caching-type="none | private | public" must-revalidate="true | false" allow-private-response-caching="@(expression to evaluate)">
  <vary-by-header>Accept</vary-by-header>
  <!-- should be present in most cases -->
  <vary-by-header>Accept-Charset</vary-by-header>
  <!-- should be present in most cases -->
  <vary-by-header>Authorization</vary-by-header>
  <!-- should be present when allow-private-response-caching is "true"-->
  <vary-by-header>header name</vary-by-header>
  <!-- optional, can be repeated -->
  <vary-by-query-parameter>parameter name</vary-by-query-parameter>
  <!-- optional, can be repeated -->
</cache-lookup>

Atributos

Atributo Descripción Necesario Valor predeterminado
allow-private-response-caching Cuando se establece en true, permite el almacenamiento en caché de las solicitudes que contienen un encabezado de autorización. Se permiten expresiones de directiva. No false
caching-type Elija entre los siguientes valores del atributo:
- internal para usar la caché de API Management integrada,
- external para usar la caché externa tal como se describe en - ,
- prefer-external para usar la caché externa si está configurada o, en caso contrario, la caché interna.

No se permiten expresiones de directiva.
No prefer-external
downstream-caching-type Este atributo debe establecerse en uno de los siguientes valores.

- none: no se permite el almacenamiento en caché de bajada.
- private: se permite el almacenamiento en caché de bajada privado.
- public: se permite el almacenamiento en caché de bajada privado y compartido.

Se permiten expresiones de directiva.
No None
must-revalidate Cuando el almacenamiento en caché de bajada está habilitado, este atributo activa o desactiva la directiva de control de caché must-revalidate en las respuestas de puerta de enlace. Se permiten expresiones de directiva. No true
vary-by-developer Establezca el valor en true para almacenar en caché las respuestas por cada cuenta de desarrollador que disponga de true incluida en la solicitud. Se permiten expresiones de directiva. false
vary-by-developer-groups Se establece en true para almacenar en caché las respuestas por true. Se permiten expresiones de directiva. false

Elementos

Nombre Descripción Obligatorio
vary-by-header Agregue uno o varios de estos elementos para iniciar el almacenamiento en caché de las respuestas por cada valor del encabezado especificado, como Accept, Accept-Charset, Accept-Encoding, Accept-Language, Authorization, Expect, From, Host e If-Match. No
vary-by-query-parameter Agregue uno o varios de estos elementos para iniciar el almacenamiento en caché de las respuestas por cada valor de los parámetros de consulta especificados. Permite introducir uno o varios parámetros. Utilice el punto y coma como separador. No

Uso

Notas de uso

  • API Management solo realiza la búsqueda de caché para solicitudes HTTP GET.
  • Al usar vary-by-query-parameter, es posible que quiera declarar los parámetros de la plantilla rewrite-uri o establecer el atributo copy-unmatched-params en false. Al desactivar esta marca, se envían al back-end los parámetros que no se han declarado.
  • Esta directiva solo se puede usar una vez en una sección de directiva.

Ejemplos

Ejemplo con la directiva de almacenamiento en caché correspondiente

<policies>
    <inbound>
        <base />
        <cache-lookup vary-by-developer="false" vary-by-developer-groups="false" downstream-caching-type="none" must-revalidate="true" caching-type="internal" >
            <vary-by-query-parameter>version</vary-by-query-parameter>
        </cache-lookup>
    </inbound>
    <outbound>
        <cache-store duration="seconds" />
        <base />
    </outbound>
</policies>

Ejemplo de uso de expresiones de directiva

En este ejemplo se muestra cómo configurar la duración del almacenamiento en caché de respuesta de API Management para que coincida con el almacenamiento en caché de respuesta del servicio de back-end especificado por la directiva Cache-Control del servicio de back-end.

<!-- The following cache policy snippets demonstrate how to control API Management response cache duration with Cache-Control headers sent by the backend service. -->

<!-- Copy this snippet into the inbound section -->
<cache-lookup vary-by-developer="false" vary-by-developer-groups="false" downstream-caching-type="public" must-revalidate="true" >
  <vary-by-header>Accept</vary-by-header>
  <vary-by-header>Accept-Charset</vary-by-header>
</cache-lookup>

<!-- Copy this snippet into the outbound section. Note that cache duration is set to the max-age value provided in the Cache-Control header received from the backend service or to the default value of 5 min if none is found  -->
<cache-store duration="@{
    var header = context.Response.Headers.GetValueOrDefault("Cache-Control","");
    var maxAge = Regex.Match(header, @"max-age=(?<maxAge>\d+)").Groups["maxAge"]?.Value;
    return (!string.IsNullOrEmpty(maxAge))?int.Parse(maxAge):300;
  }"
 />

Para obtener más información, consulte Policy expressions (Expresiones de política) y Context variable (Variable de contexto).

Para más información sobre el trabajo con directivas, vea: