Stratégies de mise en cache pour les services REST
Les services REST utilisent à la fois la mise en cache côté serveur et la mise en cache côté client. La mise en cache côté serveur est obtenue à l'aide de la mise en cache dynamique, et la mise en cache côté client est réalisée à l'aide de directives de cache dans l'en-tête de réponse.
Structure du cache REST

Où :
RESTCacheFilteranalyse l'URI de la requête, la segmente et l'ajoute à l'attribut. Il obtient également les autres attributs, tels quepreviewToken, à partir de l'en-tête HTTP.Le jeton du chemin d'accès issu de l'URL et défini sur l'attribut avec le filtre de cache du servlet.
- L'ID
cache-iddans le fichier cachespec.xml définit la règle de mise en cache de la requête REST. L'entrée de cache d'une ressource spécifique est générée avec l'IDcache-id. - L'ID
dependency-id indans le fichier cachespec.xml spécifie les identificateurs de cache supplémentaires et les associe à des typesdependency-idexistants. - Si l'ID
identifier-iddoit être converti,RESTMetaDataGeneratorgénère l'IDdependency-idavec un ID. - Si l'ID
cache-idexiste dans DynaCache, il renvoie l'entrée du cache directement à partir du cache. Si l'IDcache-idn'existe pas dans l'instance DynaCache, il appelle le servlet d'arrière-plan pour créer l'entrée de cache et renvoie les données au demandeur.
- Définissez l'ID
dependency-idpour l'identificateur, tel queCategoryDisplay:storeId:categoryIdentifier, et recherchez les produits existants, tels quedependency-idetCategoryDisplay:storeId:categoryIdentifier. Cela garantit que la fonction d'invalidation actuelle peut invalider l'entrée du cache. - Dans
RESTMetaDataGenerator, il obtient l'IDdependency-idlié à l'entrée de cache actuelle lorsque la requête est reçue. - Dans
RESTMetaDataGenerator, il envoie la requête au système d'arrière-plan pour obtenir l'ID de l'article avec l'identificateur comme paramètre de requête, tel questoreIdetcategoryIdentifier. Pour améliorer les performances des requêtes, il peut utiliser le cache de données local pour mettre en cache la requête. - Dans
RESTMetaDataGenerator, définissez l'ID en tant qu'IDdependency-id, tel queCategoryDisplay:storeId:categoryId.
dependency-id dans RESTMetaDataGenerator :
Enumeration dataIds = fragmentInfo.getDataIds();
while(dataIds.hasMoreElements()){
String dataId = (String)dataIds.nextElement();
String covertedDataId = convertDataId(dataId, req);
if(covertedDataId!=null){
fragmentInfo.addDataId(covertedDataId);
}
}
La génération de dépendances sur le serveur HCL Commerce Search n'est pas prise en charge, car il n'y a pas de générateur de métadonnées par défaut pour le mappage de partNumber et categoryIdentifier à leur ID de produit ou à leur ID de catégorie correspondant.
La classe com.ibm.commerce.rest.caching.RESTKeyListMetaDataGenerator peut diviser plusieurs ID dans les requêtes de demande REST en plusieurs ID de dépendance pour chaque ID individuel. Cette classe peut être utilisée à la fois sur les serveurs HCL Commerce et HCL Commerce Search.
Mise en cache côté serveur
- Transaction server API REST
- WCDE_installdir\components\foundation\samples\dynacache\REST
com.ibm.commerce.rest.caching.RESTCacheFilter extraits des paramètres de chemin d'accès et le définit comme attributs de requête. Les attributs de requête sont ensuite utilisés pour générer des ID de cache. Les règles d'ID de cache sont ensuite appliquées pour déterminer lesquelles des URL suivantes peuvent être mises en cache :- /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

- API REST de recherche Solr
-
Le conteneur du serveur Solr inclut un exemple de fichier cachespec.xml qui contient des configurations de mise en cache REST. Le conteneur du serveur Solr inclut l'exemple de fichier cachespec.xml.sample à l'emplacement suivant :
/profile/apps/search-ear.ear/search-rest.war/WEB-INF/cachespec.xml.rest.sample.Implémentez la mise en cache étendue en fusionnant les règles de mise en cache dans le search-rest.war/WEB-INF/cachespec.xml.rest.sample à l'emplacement /profile/apps/search-ear.ear/search-rest.war/WEB-INF/cachespec.xml.
com.ibm.commerce.rest.caching.RESTCacheFilter extrait des paramètres de chemin d'accès et le définit comme attributs de requête. Les attributs de requête sont ensuite utilisés pour générer des ID de cache. Les règles d'ID de cache sont ensuite appliquées pour déterminer lesquelles des URL suivantes peuvent être mises en cache :- /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
| Attribut de requête | Paramètre de chemin d'accès dans l'URL REST |
|---|---|
| storeId | storeID |
| catalogId | catalogID |
| ID_produit | L'ID de produit des valeurs partnumber, productID et uniqueID de l'URL du produit |
| categoryId | L'ID de catégorie de l'URL de catégorie groupID, categoryID, category_unique_ID et uniqueID |
| espotId | espotIdentifier |
| searchTerms | searchTerm |
| action | Valeur acceptées :
|
| urlType | Valeur acceptées :
Remarque : L'attribut de requête urlType n'est pas utilisé. |
La mise en cache côté serveur pour les services REST fournis par le serveur HCL Commerce qui utilise le cache servlet et les fichiers JSP ne peut pas être utilisée en raison de la liaison locale sur l'application Web du magasin. Toutefois, les applications externes en dehors de l'EAR HCL Commerce peuvent utiliser la mise en cache côté serveur fournie par le serveur HCL Commerce. En revanche, les services REST fournis par le serveur de recherche peuvent être mis en cache à l'aide de la mise en cache côté serveur, car ils sont déployés en dehors du serveur HCL Commerce. Pour plus d'informations, voir Les fichiers JSP de vitrine qui utilisent la mise en cache côté client.
Mise en cache côté client
- Date d'expiration
- Contrôle de cache
<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>
Les directives de mise en cache pour les ressources REST peuvent être remplacées ou ajoutées. Pour remplacer le délai d'expiration ou activer la mise en cache du client pour plus de ressources REST, créez ou modifiez un fichier WEB-INF/config/com.ibm.commerce.rest-ext/wc-rest-clientCaching.xml personnalisé.
Les fichiers JSP de vitrine qui utilisent la mise en cache côté client
Les fichiers JSP de vitrine peuvent utiliser la mise en cache côté client lorsque vous appelez les services REST à l'aide de la bibliothèque de balises <wcf:rest>.
- La mise en cache côté client est activée pour le service REST. Pour configurer la mise en cache côté client, voir la section précédente.
- L'attribut
cached="true"doit être spécifié. Par exemple :<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>
<wcf:rest> pour démarrer les services REST doit marquer l'entrée de son cache consume-subfragments sur true dans le fichier cachespec.xml du magasin. Si ce n'est pas fait, les fichiers JSP ou les fragments de fichiers JSP mis en cache peuvent mal démarrer les services REST et provoquer des erreurs d'exécution.
Recherche Solr - Configurations de mise en cache étendues
- Mise en cache REST Solr
- Le conteneur Transaction server inclut un exemple de fichier cachespec.xml qui contient des configurations de mise en cache REST pour le magasin Emerald (B2C). Implémentez la mise en cache étendue en fusionnant les règles de mise en cache de /profile/apps/search-ear.ear/search-rest.war/WEB-INF/cachespec.xml.rest.sample dans le fichier à l'emplacement /profile/apps/search-ear.ear/search-rest.war/WEB-INF/cachespec.xml.