Requests via proxy

La fonctionnalitĂ© proxy de Managed Runtime vous permet d’acheminer les requests vers des API hĂ©bergĂ©es sur diffĂ©rents domaines via le mĂȘme domaine que votre boutique.
Schéma associé

Pourquoi utiliser le mĂȘme domaine que votre boutique ? Imaginez que votre boutique en ligne est hĂ©bergĂ©e sur www.northerntrailoutfitters.com et que vous souhaitez demander l’API B2C Commerce Ă  api.commercecloud.salesforce.com Lancer cette request sans utiliser de proxy implique des Ă©tapes de configuration supplĂ©mentaires et ce n’est pas aussi rapide et aussi facile Ă  observer qu’avec un proxy. Comparons les deux approches :

Sans proxyAvec proxy
Vous devez configurer le serveur d’API pour qu’il rĂ©ponde avec des en-tĂȘtes CORS (cross-origin resource sharing).Aucune configuration supplĂ©mentaire n’est requise pour CORS.
Les requests d’API nĂ©cessitent une request de contrĂŽle prĂ©alable, ce qui ralentit les performances.Aucune request de rĂ©seau supplĂ©mentaire n’a Ă©tĂ© lancĂ©e.
Si le serveur d’API ne met pas les rĂ©ponses en cache, vous perdez une occasion d’amĂ©liorer considĂ©rablement les performances.Vous pouvez demander au CDN de Managed Runtime de mettre en cache des requests spĂ©cifiques.
Si vous n’avez pas accĂšs aux journaux du serveur d’API, il est difficile de mesurer son impact sur les performances globales.Toutes les requests d’API qui sont routĂ©es par le CDN de Managed Runtime via des proxys sont consignĂ©es.

Maintenant que vous comprenez l’intĂ©rĂȘt d’utiliser des proxys, explorons les diffĂ©rentes mĂ©thodes permettant de les configurer.

Configurer l’environnement de dĂ©veloppement local 

Pendant le dĂ©veloppement local, les proxys peuvent ĂȘtre configurĂ©s en modifiant le tableau mobify.ssrParameters.proxyConfigs dans <PROJECT_DIR>. Par exemple, pour configurer un proxy pour l’API B2C Commerce :

1{
2  "proxyConfigs": [
3    {
4      "host": "<SHORT_CODE>.api.commercecloud.salesforce.com",
5      "path": "api"
6    }
7  ]
8}

Le tableau proxyConfigs contient des objets qui dĂ©finissent une configuration de proxy avec les propriĂ©tĂ©s suivantes :

  • host : l’hĂŽte d’origine qui reçoit vos requests.
  • path : le nom utilisĂ© dans le chemin de la request pour identifier ce proxy.

Pour effectuer une request via proxy dans le code de votre application, suivez ce schĂ©ma lors de la crĂ©ation des chemins de request : <PROXY_PATH>.

Choisissez des chemins proxy qui vous permettent de reconnaĂźtre facilement les API que vous utilisez.

Tip

Examinons un exemple de request qui utilise api comme valeur de path. Par dĂ©faut, les projets créés avec PWA Kit incluent une configuration proxy qui associe le chemin api Ă  l’API B2C Commerce.

1import {getAppOrigin} from 'pwa-kit-react-sdk/utils/url'
2
3// `getAppOrigin` returns the correct origin for both local development and Managed Runtime environments.
4fetch(`${getAppOrigin()}/mobify/proxy/api/categories/bikes`)

Lorsque vous modifiez la configuration du proxy pendant le développement local, vous devez redémarrer votre serveur de développement local pour que les modifications soient prises en compte.

Configurer des environnements Managed Runtime 

Managed Runtime ignore les paramĂštres de proxy dans les fichiers de configuration. Au lieu de cela, les proxys doivent ĂȘtre configurĂ©s Ă  l’aide de Runtime Admin ou de l’API Managed Runtime.

Utiliser Runtime Admin 

Pour configurer les proxys pour un environnement Managed Runtime Ă  l’aide de notre outil d’administration Web, procĂ©dez comme suit :

  1. Connectez-vous à l’outil Runtime Admin.
  2. Cliquez sur votre projet.
  3. Cliquez sur un environnement.
  4. Cliquez sur Environment Settings (Paramùtres d’environnement) dans le menu de navigation de gauche.
  5. Dans la section Advanced (Avancés), cliquez sur Edit (Modifier).
  6. Sous Proxy Configs (Configurations de proxy), cliquez sur Add New Proxy (Ajouter un nouveau proxy).
  7. Indiquez le chemin d’accùs, le protocole et l’hîte.
  8. RĂ©pĂ©tez l’opĂ©ration pour un maximum de 8 configurations de proxy.
  9. Revenez au début de la section Advanced et cliquez sur Update (Mettre à jour).
  10. Attendez que le paquet finisse de se redéployer.
  11. Vérifiez que la configuration du proxy fonctionne comme prévu.

Capture d'écran de Runtime Admin

Utiliser l’API Managed Runtime 

Vous pouvez Ă©galement configurer des proxys pour les environnements Managed Runtime par programmation Ă  l’aide du point de terminaison projects_target_partial_update. (L’API Managed Runtime utilise souvent le terme « target Â», soit cible, au lieu d’environnement, mais les deux termes font rĂ©fĂ©rence Ă  la mĂȘme chose).

Voici un exemple de request qui met Ă  jour un environnement pour inclure une configuration de proxy pour les chemins d’accĂšs api et ocapi :

1curl "https://cloud.mobify.com/api/projects/$PROJECT/target/$ENVIRONMENT/" \
2  --request 'PATCH' \
3  --header "Authorization: Bearer $API_KEY" \
4  --data '{
5            "ssr_proxy_configs": [
6                {
7                    "host": "api.commercecloud.salesforce.com",
8                    "path": "api",
9                },
10                {
11                    "host": "aaaa-001.dx.commercecloud.salesforce.com",
12                    "path": "ocapi"
13                }
14            ]
15          }'

Lors de la crĂ©ation ou de la mise Ă  jour d’environnements, le corps de la request JSON accepte un tableau d’objets de configuration de proxy Ă  partir d’un champ appelĂ© ssr_proxy_configs. Les objets de configuration proxy incluent host et path, comme dans les fichiers de configuration.

Éviter les temps d’arrĂȘt en production 

Pour Ă©viter les temps d’arrĂȘt, les Ă©tapes d’ajout ou de suppression des proxys dans un environnement de production doivent respecter un ordre prĂ©cis.

Pour ajouter un proxy Ă  un environnement de production :

  1. Modifiez les paramĂštres de l’environnement de production Ă  l’aide de Runtime Admin ou de l’API Managed Runtime. (Suivez les instructions dĂ©crites prĂ©cĂ©demment).
  2. Ajoutez le nouveau proxy aux paramùtres de l’environnement et enregistrez vos modifications.
  3. Mettez Ă  jour votre code PWA Kit pour utiliser le nouveau proxy.
  4. Envoyez un nouveau paquet de votre code PWA Kit en push vers Managed Runtime.
  5. Déployez le nouveau paquet.

Pour supprimer un proxy d’un environnement de production :

  1. Mettez Ă  jour votre code PWA Kit pour utiliser le nouveau proxy.
  2. Envoyez un nouveau paquet de votre code PWA Kit en push vers Managed Runtime.
  3. Déployez le nouveau paquet.
  4. Modifiez les paramĂštres de l’environnement de production Ă  l’aide de Runtime Admin ou de l’API Managed Runtime. (Suivez les instructions dĂ©crites prĂ©cĂ©demment).
  5. Supprimez le proxy des paramùtres d’environnement et enregistrez vos modifications.

Remplacer les configurations de proxy local par des variables d’environnement 

Dans le dĂ©veloppement local, vous pouvez remplacer les configurations de proxy Ă  l’aide de variables d’environnement.

DĂ©finissez une variable d’environnement appelĂ©e SSR_PROXY1 pour remplacer le premier Ă©lĂ©ment du tableau proxyConfigs. DĂ©finissez-en une appelĂ©e SSR_PROXY2 pour remplacer le deuxiĂšme Ă©lĂ©ment, et ainsi de suite.

Voici comment cela fonctionne : si la variable d’environnement SSR_PROXY1 est dĂ©finie sur https://api-staging.example.com/api, elle remplace le premier Ă©lĂ©ment du tableau proxyConfigs par l’objet de configuration de proxy suivant :

1{
2  "host": "api-staging.example.com",
3  "path": "api"
4}

Ces variables d’environnement sont couramment utilisĂ©es avec la commande npm start lors du dĂ©veloppement local pour utiliser diffĂ©rentes instances de l’hĂŽte de l’API, telles que staging ou production. Voici un exemple qui remplace le premier objet de configuration du proxy afin que le chemin api route les requests vers une instance staging :

1SSR_PROXY1=https://api-staging.example.com/api npm start

Rechercher la configuration de proxy actuelle 

Une fois les paramĂštres de proxy configurĂ©s, vous pouvez les consulter Ă  l’aide de la fonction utilitaire getProxyConfigs du SDK React de PWA Kit. Par exemple, vous pouvez utiliser un identifiant client diffĂ©rent en fonction de l’environnement dans lequel votre code est exĂ©cutĂ© :

1import {getProxyConfigs} from 'pwa-kit-react-sdk/ssr/universal/utils.js'
2
3const HOST_TO_CLIENT_ID = {
4  'api-staging.example.com': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
5  default: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
6}
7
8const CLIENT_ID = (function getClientId() {
9  const {host} = getProxyConfigs().find((c) => c.path === 'api')
10  return HOST_TO_CLIENT_ID[host] || HOST_TO_CLIENT_ID['default']
11})()

Modifications des requests et des rĂ©ponses 

Lorsqu’une request est mise en proxy, la request Ă  l’origine et la rĂ©ponse Ă  partir de l’origine sont toutes deux modifiĂ©es pour qu’elles fonctionnent de maniĂšre transparente avec votre code d’application.

Les exemples fournis dans cette section supposent que l’application est hĂ©bergĂ©e Ă  l’adresse www.northerntrailoutfitters.com et qu’elle est configurĂ©e pour acheminer les requests via proxy vers api.commercecloud.com..

Note

Modifications de la request 

Les modifications suivantes sont appliquĂ©es Ă  la request avant de l’envoyer Ă  l’hĂŽte :

  • Supprimez le prĂ©fixe ‘/mobify/proxy/<PROXY_PATH>/’.
  • Ajout d’un en-tĂȘte HTTP de X-Mobify: true.

Les requests par proxy transmettent tous les paramĂštres et en-tĂȘtes de chaĂźne de requĂȘte, y compris les cookies.

Modifications de la rĂ©ponse 

Les modifications suivantes sont appliquĂ©es Ă  la rĂ©ponse avant de l’envoyer au client :

  • Ajout d’un en-tĂȘte HTTP de `X-Request-Url: “ avec l’URL demandĂ©e.
  • Si la rĂ©ponse est une redirection et que dans l’en-tĂȘte Location de la rĂ©ponse, l’host correspond Ă  l’host du proxy, alors cet host est prĂ©fixĂ© par <PROXY_PATH>.
  • Si la rĂ©ponse contient des en-tĂȘtes Set-Cookie dont le domain correspond Ă  l’host du proxy, ils sont modifiĂ©s pour correspondre Ă  ce dernier. Par exemple, Set-Cookie: key=val; domain=api.commercecloud.com devient Set-Cookie: key=val; domain=www.northerntrailoutfitters.com.
  • Si la rĂ©ponse contient un en-tĂȘte Access-Control-Allow-Origin dont la valeur correspond Ă  l’host du proxy, il est modifiĂ© en Access-Control-Allow-Origin: https://www.northerntrailoutfitters.com.

Pour tester vos modifications, crĂ©ez une configuration de proxy avec l’hĂŽte httpbin.org. Si vous lancez une request par le biais de ce proxy, il renvoie les en-tĂȘtes qu’il reçoit.

AmĂ©liorer les performances du proxy grĂące Ă  la mise en cache 

Par dĂ©faut, les requests passant par un proxy ne sont pas mises en cache par le CDN. Cette valeur par dĂ©faut permet d’utiliser les requests de proxy de maniĂšre transparente dans votre code, sans avoir Ă  vous soucier de problĂšmes de mise en cache des rĂ©ponses.

Si vous souhaitez vraiment qu’une request de proxy soit mise en cache par le CDN, modifiez le prĂ©fixe du chemin utilisĂ© dans votre request pour changer proxy en caching.

Les proxys de mise en cache ne peuvent pas ĂȘtre utilisĂ©s avec l’API B2C Commerce. Utilisez plutĂŽt sa fonctionnalitĂ© de mise en cache au niveau web cĂŽtĂ© serveur.

Note

DĂ©tails de la mise en cache 

Les requests via proxy en cache diffĂšrent des requests via proxy standard :

  • L’en-tĂȘte HTTP Cookie est supprimĂ©.

Les rĂ©ponses en cache diffĂšrent des rĂ©ponses standard :

  • Tous les en-tĂȘtes HTTP Set-Cookie sont supprimĂ©s.

Les rĂ©ponses mises en cache comprennent les en-tĂȘtes HTTP suivants, de sorte que lorsque les valeurs de ces en-tĂȘtes varient, les rĂ©ponses sont mises en cache sĂ©parĂ©ment :

  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Authorization
  • Range

Les rĂ©ponses qui comprennent d’autres en-tĂȘtes HTTP ne sont pas mises en cache sĂ©parĂ©ment lorsque leurs valeurs varient.

Contraintes 

Les contraintes des proxys sont diffĂ©rentes de celles du serveur d’applications.

  • Le temps d’exĂ©cution des requests via proxy est limitĂ© Ă  30 secondes. Si une rĂ©ponse provenant de l’origine ne se termine pas dans ce dĂ©lai, une erreur HTTP 504 est renvoyĂ©e.
  • L’origine doit fournir un certificat valide et prendre en charge l’utilisation de TLS 1.2 ou d’une version ultĂ©rieure, sinon une erreur HTTP 502 est renvoyĂ©e. Vous pouvez vĂ©rifier si vos origines prennent en charge TLS Ă  l’aide de l’outil SSL Labs.
  • La taille des requests ou des rĂ©ponses n’est aucunement limitĂ©e.
  • Les requests des proxys peuvent utiliser l’en-tĂȘte Cookie. Les rĂ©ponses des proxys peuvent inclure l’en-tĂȘte Set-Cookie.
  • L’hĂŽte utilisant le proxy doit avoir une adresse publique. Si l’hĂŽte Ă  proxy n’est accessible qu’à partir d’un rĂ©seau privĂ© ou s’il est bloquĂ© comme les hĂŽtes demandware.net, une erreur HTTP est renvoyĂ©e.
  • Le proxy de mise en cache ne prend en charge que les mĂ©thodes HEAD, GET et OPTIONS. Les requests POST ne sont pas prises en charge.

Étapes suivantes 

Maintenant que vous comprenez comment et pourquoi utiliser les proxys dans votre application de commerce, continuez Ă  explorer la documentation de PWA Kit.