Liaison locale REST

La liaison locale améliore les performances de la structure REST en fournissant un flux REST optimisé.

Elle empêche les requêtes HTTP REST de bouclage lorsque le fichier WAR HCL Commerce se trouve sur le même serveur d'applications et transmet directement la mappe des données de réponse à la balise REST. Autrement dit, elle force le comportement de la requête HTTP REST à fonctionner sur une seule unité d'exécution, et empêcher la nécessité de créer plusieurs unités d'exécution pour résoudre les requêtes ultérieures. La liaison locale empêche les appels locaux du service HCL Commerce vers la couche de service REST et empêche que des ressources supplémentaires ne soient requises depuis le service HCL Commerce (conteneur Web).

La liaison locale fonctionne sur la balise RESTtag. Elle prend en charge les requêtes dans le cadre de l'implémentation RESTTag (wcf:rest).

Le flux optimisé suivant est le résultat d'une liaison locale sur la structure REST :
Flux optimisé pour la liaison locale sur la structure REST
Où :
  • La liaison locale REST crée une requête de servlet interne qui encapsule la requête d'origine et une réponse servlet interne. La requête interne remplace l'URL par l'URL REST initialement démarrée. Les paramètres, les en-têtes et les attributs sont transmis à partir de la requête d'origine. Les attributs supplémentaires de la requête incluent l'indicateur précisant si la requête en cours se trouve dans la liaison locale, la mappe des données de réponse et la mappe du corps de la requête. En outre, les constantes pour la liaison locale sont également définies pour l'aperçu du magasin.
  • La réponse interne remplace l'en-tête et le flux de sortie de réponse pour empêcher toute surcharge supplémentaire. Un flux de sortie de liaison local distinct est créé pour la réponse afin d'éviter tout remplacement avec le flux de sortie de la requête d'origine.
  • Pour les requêtes qui contiennent un corps (requêtes POST et PUT), le corps est ajouté en tant qu'attribut à la requête, sous la forme d'une mappe, et transmis aux gestionnaires. Lorsque le corps de requête est vide, l'attribut du corps de requête dans la requête est également vide. Lorsque la mappe d'entrée de requête est ajoutée à l'attribut de la requête interne et qu'elle est récupérée au besoin, la sérialisation et la désérialisation du corps de requête sont évitées, les données brutes ayant été utilisées le cas échéant. Toute la logique consistant à récupérer la mappe du corps de requête est effectuée dans la méthode com.ibm.commerce.foundation.rest.resourcehandler.AbstractResourceHandler.getMapFromRequest(HttpServletRequest request, String responseFormat). La méthode renvoie ensuite un objet JSONObject de la mappe de données à partir de l'attribut de la requête interne, lorsque l'indicateur IN_LOCAL_BINDING est défini dans l'attribut de la requête interne. Cette mappe de données est une mappe de hachage qui est composée des données de réponse de la requête REST effectuée.
  • Un répartiteur de requête est utilisé pour démarrer directement un appel REST sans requête HTTP. Le répartiteur est créé à l'aide du contexte REST pour la requête, et l'URL ciblée est le chemin d'accès de l'URL REST initiale. Une fois qu'un répartiteur est récupéré, une action include est effectuée sur celui-ci à l'aide de la requête interne et des objets de package de réponse interne. Une fois qu'il est créé et que le conteneur servlet est activé, le servlet mappé à l'URL REST est entré dans la création du répartiteur. JSON est le format de réponse forcée pour la liaison locale. La mappe des données de réponse est définie comme un attribut de la requête interne, puis est renvoyée vers la balise REST. En transmettant directement la mappe des données, toute sérialisation ou désérialisation des données peut être ignorée, au lieu d'utiliser la mappe des données brutes en cas de besoin.

Optimisations des requêtes internes

Une requête et une réponse internes sont créées avec une combinaison de valeurs fournies par le fichier de configuration initial et les remplacements des valeurs d'origine. Le format de réponse est défini sur JSON (le paramètre de requête et l'en-tête définissent le format responseFormat en tant que JSON). La logique de réponse est effectuée dans le fournisseur d'entité JSON. Le répartiteur est exécuté vers l'URL REST formulée à l'aide du contexte REST créé pour la première fois au démarrage du serveur.

La liste suivante résume certaines des étapes qui peuvent être ignorées au cours de la requête interne exécutée dans la liaison locale qui se produit généralement sous la liaison distante. Ces étapes sont soit jugées inutiles dans l'exécution de la liaison locale, soit entraînent des frais généraux supplémentaires lors de l'exécution et sont omises pour l'optimisation des performances dans la liaison locale :
  • Ignorez la validation de session utilisateur pour réutiliser le jeton de validation existant à l'aide de l'attribut de requête qui indique la liaison locale.
  • Ignorer l'analyse userId pour récupérer la valeur userId à partir de la session utilisateur existante.
  • Le cookie d'authentification, le cookie de session persistant et la session utilisateur sont tous récupérés depuis le contexte de la session.
  • La mappe d'entrée de requête est récupérée directement de l'attribut de la requête interne, et la désérialisation du corps de requête est évitée.
  • Toute invocation du fournisseur XMLEntityProvider est ignorée, car la liaison locale fonctionne uniquement dans le fournisseur JSONEntityProvider.
  • La balise REST est en mesure d'accepter la mappe de réponse comme attribut de la requête interne. Une fois que le contrôle est renvoyé à la balise RestTag et que toute analyse du flux de sortie est ignorée.

Pour l'aperçu du magasin, les chemins de code similaires au code fourni dans RestPreviewServlet sont reproduits dans l'exécution du répartiteur, avec des modifications pour la liaison locale. L'aperçu du magasin est déterminé par l'indicateur in_Preview défini dans l'attribut de la requête. Le répartiteur d'aperçu est créé à l'aide du contexte de servlet REST à partir de ServerConfiguration et l'URL ciblée est le chemin d'accès de l'URL REST initiale. Une fois qu'un répartiteur est récupéré, une action include est effectuée sur celui-ci à l'aide de la requête interne créée et des objets de package de réponse interne.

La mappe de données résultante est transmise au fournisseur d'entités JSON, convertie en objet JSON et ajoutée en tant qu'attribut à la requête interne. Toute écriture ou manipulation du flux de sortie de réponse utilise le flux de sortie de réponse de liaison locale pour éviter les écritures inutiles, puisque toutes les données sont transmises par les attributs de requête. La balise REST récupère la mappe à partir des attributs de requête.