Almacenamiento en memoria caché para servicios REST

Los servicios REST utilizan almacenamiento en memoria caché del lado del servidor y del lado del cliente. El almacenamiento en memoria caché del lado del servidor se logra utilizando dynacache y el almacenamiento en memoria caché del lado del cliente se logra utilizando directivas de memoria caché en la cabecera de respuesta.

Infraestructura de memoria caché REST

El siguiente diagrama muestra el flujo de interacciones de infraestructura de memoria caché REST:
Flujo de interacciones de infraestructura de memoria caché REST
Donde:
  1. RESTCacheFilter analiza el URI de solicitud, lo señala y lo añade al atributo. También obtiene los demás atributos, como previewToken, de la cabecera HTTP.

    La señal de vía de acceso se obtiene del URL y se establece en el atributo con el filtro de memoria caché del servlet.

  2. El cache-id en el archivo cachespec.xml define la regla para almacenar en memoria caché la solicitud REST. La entrada de memoria caché de un recurso específico se genera con cache-id.
  3. El dependency-id in en cachespec.xml especifica los identificadores de memoria caché adicionales y los asocia a tipos de dependency-id existentes.
  4. Si es necesario convertir identifier-id, RESTMetaDataGenerator genera dependency-id con un ID.
  5. Si cache-id existe en la instancia DynaCache, devuelve la entrada de memoria caché directamente desde la memoria caché. Si cache-id no existe en la instancia DynaCache, llama al servlet de programa de fondo para que cree la entrada de memoria caché y devuelve los datos al solicitante.
Para generar dependencias en el servidor HCL Commerce:
  1. Defina el dependency-id para el identificador, por ejemplo CategoryDisplay:storeId:categoryIdentifier, y busque el dependency-id relacionado existente, por ejemplo CategoryDisplay:storeId:categoryIdentifier. Esto garantiza que la función de invalidación actual pueda invalidar la entrada de memoria caché.
  2. En RESTMetaDataGenerator, obtiene el dependency-id relacionado con la entrada caché actual cuando se recibe la solicitud.
  3. En RESTMetaDataGenerator, envía la consulta al sistema de fondo para obtener el ID del elemento con el identificador como un parámetro de consulta, tales como storeId y categoryIdentifier. Para mejorar el rendimiento de consultas, puede utilizar la memoria caché de datos local para almacenar en la memoria caché la consulta.
  4. En RESTMetaDataGenerator, establezca el ID como el dependency-id, por ejemplo CategoryDisplay:storeId:categoryId.
Por ejemplo, para convertir el dependency-id en RESTMetaDataGenerator:

Enumeration dataIds = fragmentInfo.getDataIds();
    while(dataIds.hasMoreElements()){
         String dataId = (String)dataIds.nextElement();
         String covertedDataId = convertDataId(dataId, req);

        if(covertedDataId!=null){
       fragmentInfo.addDataId(covertedDataId);
    }
}

No se da soporte a la generación de dependencias en el servidor de búsqueda de HCL Commerce porque no hay ningún metagenerador predeterminado para correlacionar partNumber y categoryIdentifier con su correspondiente ID de producto o ID de categoría.

La clase com.ibm.commerce.rest.caching.RESTKeyListMetaDataGenerator puede dividirse en varios ID de consultas de solicitud REST en varios ID de dependencia para cada ID individual. Esta clase puede utilizarse en tanto en el servidor de HCL Commerce y como en el servidor de búsqueda de HCL Commerce.

Almacenamiento en memoria caché del lado del servidor

El almacenamiento en memoria caché de lado del servidor se logra utilizando dynacache. Puede personalizar el archivo de ejemplo proporcionado cachespec.xml como desee, proporcionando reglas personalizadas para el almacenamiento en la memoria caché y la generación de dependencias entre ellas. Los archivos cachespec.xml de ejemplo pueden encontrarse en la siguiente ubicación:
Transaction server API REST
WCDE_installdir\components\foundation\samples\dynacache\REST
El com.ibm.commerce.rest.caching.RESTCacheFilter extrae los parámetros de la vía de acceso y lo establece como atributos de solicitud. A continuación, los atributos de solicitud se utilizan para crear cache-id. Posteriormente, las reglas de cache-id se aplican para determinar cuál de los URL siguientes pueden almacenarse en memoria caché:
  • /wcs/resources/store/storeID/categoryview/@top
  • /wcs/resources/store/storeID/categoryview/categoryIdentifier
  • /wcs/resources/store/storeID/categoryview/byId/categoryId
  • /wcs/resources/store/storeID/categoryview/byIds
  • /wcs/resources/store/storeID/categoryview/byParentCategory/parentCategoryId
  • /wcs/resources/store/storeID/productview/partnumber
  • /wcs/resources/store/storeID/productview/byId/productId
  • /wcs/resources/store/storeID/productview/byCategory/categoryId
  • /wcs/resources/store/storeID/productview/bySearchTerm/searchTerm
  • /wcs/resources/store/storeID/espot/espotIdentifier
  • /wcs/resources/store/storeID/espot/espotIdentifier/category/categoryID
  • /wcs/resources/store/storeID/espot/espotIdentifier/product/productID
HCL Commerce Version 9.1.12.0 or later
La API de REST de búsqueda de Solr

El contenedor del servidor Solr incluye un archivo cachespec.xml de ejemplo que contiene configuraciones de REST de almacenamiento en la memoria caché. El contenedor del servidor Solr incluye el archivo cachespec.xml.sample de ejemplo en la ubicación siguiente: /profile/apps/search-ear.ear/search-rest.war/WEB-INF/cachespec.xml.rest.sample .

Implemente el almacenamiento ampliado en la memoria caché fusionando las reglas de almacenamiento en la memoria caché en el search-rest.war/WEB-INF/cachespec.xml.rest.sample, en la ubicación /profile/apps/search-ear.ear/search-rest.war/WEB-INF/cachespec.xml.

com.ibm.commerce.rest.caching.RESTCacheFilter extrae los parámetros de la vía de acceso y los establece como atributos de solicitud. A continuación, los atributos de solicitud se utilizan para crear cache-id. Posteriormente, las reglas de cache-id se aplican para determinar cuál de los URL siguientes pueden almacenarse en memoria caché:
  • /search/resources/store/{storeId}/categoryview/@top
  • /search/resources/store/{storeId}/categoryview/{categoryIdentifier}
  • /search/resources/store/{storeId}/categoryview/byId/{uniqueID}
  • /search/resources/store/{storeId}/categoryview/byIds?id={uniqueID1}&id={uniqueID2}
  • /search/resources/store/{storeId}/categoryview/byParentCategory/{category_unique_id}
  • /search/resources/store/{storeId}/productview/{partnumber}
  • /search/resources/store/{storeId}/productview/byPartNumbers?partNumber={partnumber1}&partNumber={partnumber2}
  • /search/resources/store/{storeId}/productview/byId/{uniqueID}
  • /search/resources/store/{storeId}/productview/byIds?id={uniqueID1}&id={uniqueID2}
  • /search/resources/store/{storeId}/productview/byCategory/{category_unique_id
  • /search/resources/store/{storeId}/productview/bySearchTerm/{searchTerm}?pageNumber={pageNumber}&pageSize={pageSize}
  • /search/resources/store/{storeId}/productview/bySearchTerm/{searchTerm}?metaData={metaDataValue}
  • /search/resources/store/{storeId}/sitecontent/webContentsBySearchTerm/{searchTerm}
  • /search/resources/store/{storeId}/sitecontent/suggestions
RESTCacheFilter establece los atributos de solicitud siguientes:
Atributos de solicitud y parámetros de vía de acceso en URL
Atributo de solicitud Parámetro de vía de acceso en URL REST
storeId storeID
catalogId catalogID
productId El ID de producto de partnumber, productID y uniqueID del URL de producto
categoryId El ID de categoría del groupID, categoryID, category_unique_ID y uniqueID del URL de categoría
espotId espotIdentifier
searchTerm searchTerm
acción Valores aceptados:
  • topCategories
  • productDisplay
  • categoryDisplay
urlType Valores aceptados:
  • espot
  • search
Nota: El atributo de solicitud urlType no se utiliza.
Los dependency-id se generan para que coincidan con el esquema de invalidación definido en otros archivos cachespec.xml de ejemplo.
Nota: Compruebe los archivos cachespec.xml bajo los directorios de invalidation/store e invalidation/catalog para obtener definiciones más detalladas.

El almacenamiento en memoria caché de lado del servidor para los servicios REST que proporciona HCL Commerce Server que utiliza la memoria caché de servlet y archivos JSP no puede utilizarse debido a un vínculo local en la aplicación web de tienda. Sin embargo, las aplicaciones externas fuera del EAR de HCL Commerce pueden utilizar el almacenamiento en memoria caché de lado del servidor que proporciona HCL Commerce Server. En cambio, los servicios REST proporcionados por el servidor de búsqueda pueden almacenarse en memoria caché utilizando el almacenamiento en memoria caché de lado del servidor porque se despliegan fuera de HCL Commerce Server. Para obtener más información, consulte Archivos JSP de escaparate que utilizan el almacenamiento en memoria caché del lado de cliente.

Almacenamiento en memoria caché del lado del cliente

El almacenamiento en memoria caché del lado del cliente se consigue utilizando directivas de memoria caché en la cabecera de respuesta. Las directivas que se pueden establecer en las cabeceras de respuesta son:
  • Caduca
  • Cache-Control
La directiva Cache-Control solo soporta si el recurso se puede almacenar en memoria caché de forma privada o pública.
El módulo web de servicios REST configura los siguientes recursos en el archivo WEB-INF/config/com.ibm.commerce.rest/wc-rest-clientCaching.xml:

<cache>
  <!-- resource name="example" expiresAfter="60 (mins)" isPrivate="true|false"-->

  <resource name="categoryview" expiresAfter="60" isPrivate="false"/>
  <resource name="productview" expiresAfter="60" isPrivate="false"/>
  <resource name="espot" expiresAfter="60" isPrivate="false"/>
</cache>

Se pueden realizar operaciones de sobreescritura o adición a las directivas de almacenamiento en memoria caché de los recursos REST. Para sobrescribir la hora de caducidad o habilitar el almacenamiento en memoria caché del cliente para más recursos REST, cree o modifique un archivo WEB-INF/config/com.ibm.commerce.rest-ext/wc-rest-clientCaching.xml personalizado.

Archivos JSP de escaparate que utilizan el almacenamiento en memoria caché del lado de cliente

Los archivos JSP de escaparate pueden utilizar el almacenamiento en memoria caché del lado de cliente cuando se llama a los servicios REST utilizando la biblioteca de etiquetas de <wcf:rest>.

Son necesarias las siguientes condiciones:
  1. El almacenamiento en memoria caché del lado del cliente está habilitado para el servicio REST. Para configurar el almacenamiento en memoria caché del lado del cliente, consulte la sección anterior.
  2. Se debe especificar el atributo cached="true". Por ejemplo:
    
    <wcf:rest var="sdb" url="store/{storeId}/databean" cached="true">
    <wcf:var name="storeId" value="${storeId}" encode="true"/>
    <wcf:param name="profileName" value="IBM_Store_Details" encode="true"/>
    <wcf:param name="langId" value="${langId}" encode="true"/>
    <wcf:param name="jspStoreDir" value="${jspStoreDir}" encode="true" />
    </wcf:rest>
    
La respuesta de solicitudes REST basada en el URL y los parámetros anteriores se almacena en memoria caché dentro de la memoria caché de datos que se llama RESTTagCache, con el nombre JNDI de memoria caché services/cache/WCRESTTagDistributedMapCache. Este almacenamiento en memoria caché es aplicable a los servicios REST proporcionados por ambos servidores, HCL Commerce y búsqueda de HCL Commerce.
Importante: Cualquier archivo JSP o fragmento de archivo JSP almacenados en memoria caché que utiliza la etiqueta <wcf:rest> para iniciar los servicios REST deben marcar el consume-subfragments de su entrada de memoria caché en true en el archivo cachespec.xml de la tienda. Si no es así, los archivos JSP o fragmentos de archivos JSP almacenados en memoria caché pueden iniciar los servicios REST de forma incorrecta y provocar errores de tiempo de ejecución.
HCL Commerce Version 9.1.12.0 or later

Búsqueda de Solr: configuraciones de almacenamiento ampliadas en la memoria caché

Almacenamiento en REST en Solr
El contenedor de Transaction server incluye un archivo de ejemplo cachespec.xml que contiene configuraciones de almacenamiento en la memoria caché de REST para la tienda Emerald (B2C). Implemente el almacenamiento en la memoria caché ampliada fusionando las reglas de almacenamiento en la memoria caché de /profile/apps/search-ear.ear/search-rest.war/WEB-INF/cachespec.xml.rest.sample en search-rest.war > cachespec.xml, en la ubicación /profile/apps/search-ear.ear/search-rest.war/WEB-INF/cachespec.xml.