Ejercicio: Configuración de una directiva de almacenamiento en caché

Completado

Cuando administra API con Azure API Management, puede modificar el comportamiento de las API mediante el uso de directivas, sin necesidad de reescribir el código. Para almacenar en caché las respuestas de la API, use las directivas de almacenamiento en caché de API Management.

Trabaja como desarrollador para una empresa de juegos de mesa y decide implementar el almacenamiento en caché para una API de juegos de mesa. En primer lugar, debe agregar la API a API Management. Después, escribirá las directivas de almacenamiento en caché. En este ejercicio, lo haremos con ambas opciones.

Importante

Para realizar este ejercicio, se necesita una suscripción de Azure propia y puede que se apliquen cargos. Si aún no tiene una suscripción de Azure, cree una cuenta gratuita antes de comenzar.

Nota:

En este ejercicio, la API web de juegos de mesa se hospeda en el dominio azurewebsites.net. La instancia de API Management está en el dominio azure-api.net.

Creación de caché de Redis

Para este módulo, usaremos el nivel Consumo de API Management. Esto se debe a que Azure configura instancias de API Management para este nivel en tan solo un minuto aproximadamente. Otros niveles pueden tardar hasta 30 minutos o más.

El nivel de consumo de API Management está pensado para las organizaciones que prefieren compilar las API siguiendo principios sin servidor. Es un nivel que no tiene ninguna memoria caché interna. Por lo tanto, debemos crear una caché externa de Redis y, luego, configurar una directiva de almacenamiento en caché de API Management para usarla.

Vamos a crear una memoria caché. Esto permitirá que la configuración se ejecute en segundo plano mientras trabajamos en otros pasos:

  1. Inicie sesión en Azure Portal.

  2. En el menú Recurso de Azure Portal o en la página Inicio, seleccione Crear un recurso. Aparecerá el panel Crear un recurso.

  3. En el menú Crear un recurso, seleccione Bases de datos y, después, busque y seleccione Azure Cache for Redis. Seleccione Crear. Aparecerá el panel Nueva caché en Redis.

  4. En la pestaña Aspectos básicos, escriba los valores siguientes para cada opción.

    Configuración Value
    Detalles del proyecto
    Subscription Seleccione su suscripción.
    Resource group Seleccione un nuevo grupo de recursos o uno ya existente. Un grupo de recursos es un contenedor que incluye los recursos relacionados para una solución de Azure.
    Detalles de instancia
    Nombre DNS Escriba un nombre único. Anótela. Lo necesitará más adelante.
    Ubicación Seleccione una región disponible.
    Tipo de caché Estándar C1

    Screenshot that shows the form that's used to create a new Redis cache.

  5. Seleccione Revisar y crear para validar la entrada y, luego, Crear.

Creación de una API web en Azure App Service

Para crear una API web de Azure App Service, siga estos pasos:

  1. En la barra de tareas de Azure, seleccione el icono de Cloud Shell para abrir Azure Cloud Shell.

    Screenshot of Cloud Shell icon in taskbar.

  2. Clone la API web de ejemplo mediante el comando siguiente:

    git clone https://github.com/MicrosoftDocs/mslearn-improve-api-performance-with-apim-caching-policy.git
    
  3. Configure la API web mediante la ejecución de estos comandos:

    cd mslearn-improve-api-performance-with-apim-caching-policy
    bash setup.sh
    

Setup.sh tiene siete partes que tardan varios minutos en ejecutarse. Cuando termine, se mostrarán tres direcciones URL:

  • Una dirección URL de prueba de API web para probar la API web
  • Una dirección URL de Swagger para la interfaz de usuario de Swagger
  • Una dirección URL de JSON de Swagger para la definición de OpenAPI

Anote estas direcciones URL, ya que se usarán en la tarea siguiente.

Prueba de la API web recién implementada

Cuando la API web se ha creado correctamente en Cloud Shell, puede probarla. Para ello, envíe una solicitud GET en el explorador o compruebe la definición de OpenAPI. Esta prueba se ejecuta en la API web en el dominio azurewebsites.net antes de que se agregue a API Management.

  1. En el menú Recurso de Azure Portal o en la página Inicio, seleccione Todos los recursos. Después, seleccione el recurso de App Service. Aparecerá el panel de App Service BoardGamingAPI123aa456789. Los números del final serán diferentes en su implementación.

  2. En la barra de comandos de la pestaña Información general, como prueba, seleccione Examinar. Observe el mensaje de error. En el explorador se muestra el mensaje "No webpage found for this address" (Página web no encontrada para esta dirección). Esto se debe a que la API web no implementa una interfaz de usuario web.

  3. En una nueva pestaña del explorador, pegue la dirección URL de prueba de la API web que copió anteriormente y seleccione ENTRAR. El explorador muestra una respuesta en formato JSON. Observe que el resultado incluye la hora del servidor con la etiqueta quotePreparedTime.

  4. En una segunda pestaña del explorador, pegue la dirección URL de Swagger que copió anteriormente y seleccione ENTRAR. El explorador muestra la página de Swagger de la API de juegos de mesa. Mantenga esta pestaña del explorador abierta para usarla más tarde.

  5. En una tercera pestaña del explorador, pegue la dirección URL de JSON de Swagger que copió anteriormente. El explorador muestra la especificación de OpenAPI en formato JSON.

Deje estas pestañas abiertas. Le resultarán útiles más adelante.

Creación de una instancia de API Management

Ahora que existe una API funcional, vamos a configurar API Management:

  1. En el menú Recurso de Azure Portal o en la página Inicio, seleccione Crear un recurso. Aparecerá el panel Crear un recurso.

  2. En el menú Crear un recurso, seleccione Integración y luego API Management en la lista de resultados. Se abre el panel Crear servicio de API Management.

  3. Escriba los valores siguientes para cada opción de la pestaña Aspectos básicos.

    Configuración Value
    Detalles del proyecto
    Subscription Seleccione su suscripción.
    Resource group Seleccione un nuevo grupo de recursos o uno ya existente. Un grupo de recursos es un contenedor que incluye los recursos relacionados para una solución de Azure.
    Detalles de instancia
    Region Elija la misma ubicación que usó para Redis Cache.
    Nombre del recurso Elija un nombre único. Anótela. Lo necesitará más adelante.
    Nombre de la organización Juegos de mesa
    Correo electrónico del administrador La dirección de correo electrónico para recibir todas las notificaciones del sistema.
    Plan de tarifa
    Plan de tarifa Consumo
  4. Seleccione Revisar y crear para validar la entrada y, luego, Crear.

Configuración de API Management para usar una caché externa

Puede configurar la instancia de API Management para usar la caché de Redis como caché externa únicamente si ya se ha completado la implementación de la caché de Redis.

  1. En el menú Recurso de Azure Portal o en la página Inicio, seleccione Todos los recursos. Después, seleccione el tipo de recurso Azure Cache for Redis. Aparecerá el panel Azure Cache for Redis.

  2. En la sección Información general del panel, el estado del recurso debería ser En ejecución. Si no es así, compruebe el estado cada pocos minutos haciendo clic en el vínculo Actualizar. Continúe solo cuando se esté ejecutando la implementación de la caché de Redis.

  3. En el menú Azure Cache for Redis, en la sección Configuración del panel izquierdo, seleccione Claves de acceso. Aparecerá el panel Claves de acceso para la instancia de Azure Cache for Redis que acaba de crear.

  4. En la esquina derecha del cuadro Cadena de conexión principal (StackExchange.Redis), seleccione el icono Copiar al portapapeles.

    Screenshot that shows how to obtain the Redis cache connection string.

  5. En el panel Todos los recursos, seleccione el recurso del servicio API Management que creó previamente. Aparece el panel Servicio de administración de API.

  6. En el menú Servicio API Management, en Deployment + Infrastructure (Implementación e infraestructura) en el panel de navegación izquierdo, seleccione Caché externa. Aparecerá el panel Caché externa de su servicio de API Management.

  7. Seleccione + Agregar en la barra de comandos. Aparecerá el panel Caché externa de su servicio de API Management.

  8. En la lista desplegable Instancia de caché, seleccione Personalizado. En el cuadro Utilizar desde, seleccione la ubicación que usó para la instancia de API Management.

  9. En el cuadro Cadena de conexión, pegue la cadena de conexión principal que copió. En la barra de comandos, seleccione Guardar.

    Screenshot that shows how to configure the external cache.

    La caché externa que ha creado aparece ahora en la página Caché externa del servicio API Management.

Incorporación de la API a API Management

Debemos aplicar una directiva para permitir que los usuarios accedan a la API. Pero antes de aplicar una directiva, debe agregar la API a la instancia de API Management.

  1. En el menú de Azure Portal o en la página Inicio, seleccione Todos los recursos. Después, seleccione el servicio API Management que creó anteriormente.

  2. En el menú API, seleccione API. Aparece el panel API del servicio de API Management. Ofrece numerosas plantillas entre las que elegir.

  3. En la sección Create from definition (Crear a partir de definición), seleccione OpenAPI. Aparece el cuadro de diálogo Crear a partir de la especificación OpenAPI.

    Screenshot that shows how to add an API to API Management in the portal.

  4. En el cuadro Especificación OpenAPI, pegue la dirección URL de JSON de Swagger que copió anteriormente.

    Screenshot that shows how to configure an OpenAPI specification in the portal.

  5. Seleccione Crear. Volverá a aparecer el panel API del servicio API Management, en el que se enumeran todas las operaciones de API disponibles para esa instancia de administración.

Prueba de la API en API Management

La API se ha agregado a la instancia de administración. Vamos a probar cómo funciona la API antes de aplicar las directivas.

  1. En el panel API del servicio API Management, seleccione la pestaña Prueba y, luego, la operación GET - GetPriceEstimate. Aparece el panel GetPriceEstimate.

  2. Indique los valores siguientes como Parámetros de plantilla y Parámetros de consulta.

    NOMBRE VALOR
    ShippingCode usa
    Juego ajedrez
    Alto 8
    Ancho 8
  3. Seleccione Enviar.

    Screenshot that shows how to test the API in API Management.

  4. Revise los resultados. Observe que se incluye el valor quotePreparedTime exacto en la carga respuesta HTTP.

    Screenshot that shows the timestamp of the payload in the test console.

  5. Seleccione Enviar para repetir la solicitud. Tenga en cuenta que la hora de la carga respuesta HTTP ha cambiado.

Adición de una directiva de almacenamiento en caché

Ahora podemos habilitar el almacenamiento en caché agregando directivas de almacenamiento en caché de respuesta.

  1. Seleccione el servicio API Management y, luego, el vínculo API. Después, seleccione la pestaña Diseño y elija la operación GET - GetPriceEstimate. Aparece el panel GetPriceEstimate.

  2. En la sección Procesamiento de entrada, seleccione + Agregar directiva. Aparece el panel Agregar directiva de entrada.

    Screenshot that shows how to add a caching policy.

  3. Seleccione Respuestas de caché. Reaparece el panel Procesamiento de entrada.

  4. En Respuestas de caché, en el cuadro Duración en segundos, escriba 600. Después, seleccione Guardar.

  5. En la sección Procesamiento de entrada, seleccione </>. Aparece el editor XML de directivas.

  6. Observe que se ha agregado una etiqueta <cache-lookup> a la sección <inbound>. También se ha agregado una etiqueta <cache-store> a la sección <outbound>.

    Screenshot that shows a policy editor with caching policies.

  7. Seleccione Guardar.

Prueba de la caché

Ejecutaremos la misma prueba en la API que en la sección anterior desde API Management. Después, revisaremos los resultados.

  1. En el panel API del servicio API Management, seleccione la pestaña Prueba y, luego, la operación GET - GetPriceEstimate. Aparece el panel GetPriceEstimate.

  2. Indique los valores siguientes como Parámetros de plantilla y Parámetros de consulta.

    NOMBRE VALOR
    ShippingCode usa
    Juego ajedrez
    Alto 8
    Ancho 8

    Screenshot that shows how to test the API in API Management.

  3. Seleccione Enviar.

  4. Revise los resultados. Observe que se incluye el valor quotePreparedTime exacto en la carga respuesta HTTP.

  5. Seleccione Enviar para repetir la solicitud. Observe que el valor quotePreparedTime de la respuesta sigue siendo el mismo. Esto se debe a que se proporciona una respuesta almacenada en caché.

Configuración de la memoria caché para variar los resultados en función de los parámetros de consulta

La memoria caché debe configurarse para proporcionar precios únicos en función del parámetro de consulta Height. El parámetro Width del juego de mesa no se usa para calcular el coste, por lo que no se configurará.

  1. En el panel API del servicio API Management, seleccione la pestaña Diseño y, luego, la operación GET - GetPriceEstimate. Aparece el panel GetPriceEstimate.

  2. En la sección Procesamiento de entrada, seleccione </> para editar el código de directiva.

  3. Reemplace toda la etiqueta <cache-lookup> por el XML siguiente:

    <cache-lookup vary-by-developer="false" vary-by-developer-groups="false" downstream-caching-type="none">
        <vary-by-query-parameter>height</vary-by-query-parameter>
    </cache-lookup>
    
  4. Seleccione Guardar.

Prueba de la nueva configuración de la caché

La memoria caché ahora debería proporcionar respuestas únicas basadas en el parámetro de consulta Height. Dado que el parámetro Width no afecta al coste, se usa una respuesta almacenada en caché incluso cuando el valor de Width cambia. Vamos a comprobarlo:

  1. En el panel API del servicio API Management, seleccione la pestaña Prueba y, luego, la operación GET - GetPriceEstimate. Aparece el panel GetPriceEstimate.

  2. Indique los valores siguientes como Parámetros de plantilla y Parámetros de consulta.

    NOMBRE VALOR
    ShippingCode usa
    Juego ajedrez
    Alto 8
    Ancho 8
  3. Seleccione Enviar.

  4. Revise los resultados. Observe que se incluye quotePreparedTime en la respuesta.

    Screenshot that shows the timestamp of the payload in the test console.

  5. Seleccione Enviar para repetir la solicitud. Tenga en cuenta que, igual que antes, el valor de tiempo de la respuesta no ha cambiado. Esto se debe a que se proporciona una respuesta almacenada en caché.

  6. A fin de probar el parámetro Height, use los valores siguientes como Parámetros de plantilla y Parámetros de consulta.

    NOMBRE VALOR
    ShippingCode usa
    Juego ajedrez
    Alto 100
    Ancho 8
  7. Seleccione Enviar.

  8. Revise el resultado. Esta vez, el resultado se actualiza y cambia. No se usó una memoria caché porque el parámetro de consulta Height se cambió en la solicitud. Esta respuesta es correcta para la API.

  9. Vamos a probar el parámetro Width. Indique los valores siguientes como Parámetros de plantilla y Parámetros de consulta.

    NOMBRE VALOR
    ShippingCode usa
    Juego ajedrez
    Alto 100
    Ancho 500
  10. Seleccione Enviar.

  11. Revise el resultado. Esta vez, aunque el parámetro de consulta Width es diferente, el resultado no cambia. Esto se debe a que se proporciona una respuesta almacenada en caché.