{"componentChunkName":"component---src-templates-post-jsx","path":"/fr/middleware-api","result":{"data":{"markdownRemark":{"html":"<h1>Middleware API : Gestion Efficace des Requêtes HTTP</h1>\n<p>Dans le développement d'applications web modernes, la gestion efficace des requêtes HTTP est essentielle pour assurer des performances optimales, une sécurité renforcée et une expérience utilisateur fluide. Les middlewares API sont des outils puissants qui permettent de traiter les requêtes HTTP de manière flexible et efficace. Dans cet article, nous explorerons en détail les middlewares API dans le contexte de Drupal, en mettant en évidence leur utilisation, leur fonctionnement et leurs avantages pour les développeurs Drupal.</p>\n<h2>Qu'est-ce que les Middlewares API dans Drupal ?</h2>\n<p>Les middlewares API dans Drupal sont des couches logicielles intermédiaires qui interceptent et traitent les requêtes HTTP avant qu'elles n'atteignent les contrôleurs de route ou les services finaux. Ils offrent une flexibilité accrue pour modifier, valider ou enrichir les requêtes HTTP en fonction des besoins spécifiques de l'application.</p>\n<h2>Fonctionnement des Middlewares API</h2>\n<p>Les middlewares API dans Drupal fonctionnent en suivant un modèle de pipeline, où chaque middleware intercepte la requête HTTP, effectue une action spécifique, puis passe la requête au middleware suivant dans la chaîne. Les middlewares peuvent effectuer une variété d'opérations, telles que l'authentification, l'autorisation, la validation des données, la mise en cache et la gestion des erreurs.</p>\n<h2>Utilisation des Middlewares API dans Drupal</h2>\n<p>Voici un exemple d'utilisation des middlewares API dans Drupal :</p>\n<p>Supposons que vous avez besoin d'authentifier les requêtes HTTP entrantes à votre API Drupal en vérifiant la présence d'un jeton d'authentification dans l'en-tête de la requête. Vous pouvez utiliser un middleware API pour intercepter chaque requête entrante, valider le jeton d'authentification et autoriser l'accès aux ressources protégées.</p>\n<p>Voici comment vous pourriez mettre en œuvre cela dans Drupal en utilisant un middleware personnalisé :</p>\n<ul>\n<li>Créez un nouveau module Drupal (par exemple, <code class=\"language-text\">custom_middleware</code>) et déclarez-le dans votre fichier <code class=\"language-text\">.info.yml</code>.</li>\n<li>Créez une classe pour votre middleware dans le dossier <code class=\"language-text\">src/Middleware</code> de votre module. Par exemple, <code class=\"language-text\">CustomMiddleware.php</code>.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\"><span class=\"token comment\">// modules/custom/custom_middleware/src/Middleware/CustomMiddleware.php</span>\n\n<span class=\"token keyword\">namespace</span> <span class=\"token package\">Drupal<span class=\"token punctuation\">\\</span>custom_middleware<span class=\"token punctuation\">\\</span>Middleware</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">use</span> <span class=\"token package\">Symfony<span class=\"token punctuation\">\\</span>Component<span class=\"token punctuation\">\\</span>HttpFoundation<span class=\"token punctuation\">\\</span>Request</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">use</span> <span class=\"token package\">Symfony<span class=\"token punctuation\">\\</span>Component<span class=\"token punctuation\">\\</span>HttpFoundation<span class=\"token punctuation\">\\</span>Response</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">use</span> <span class=\"token package\">Symfony<span class=\"token punctuation\">\\</span>Component<span class=\"token punctuation\">\\</span>HttpKernel<span class=\"token punctuation\">\\</span>HttpKernelInterface</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">CustomMiddleware</span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">HttpKernelInterface</span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token keyword\">protected</span> <span class=\"token variable\">$httpKernel</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">function</span> <span class=\"token function\">__construct</span><span class=\"token punctuation\">(</span>HttpKernelInterface <span class=\"token variable\">$http_kernel</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token variable\">$this</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token property\">httpKernel</span> <span class=\"token operator\">=</span> <span class=\"token variable\">$http_kernel</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">function</span> <span class=\"token function\">handle</span><span class=\"token punctuation\">(</span>Request <span class=\"token variable\">$request</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$type</span> <span class=\"token operator\">=</span> self<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token constant\">MASTER_REQUEST</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$catch</span> <span class=\"token operator\">=</span> <span class=\"token boolean constant\">TRUE</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// Vérifiez la présence d'un jeton d'authentification dans l'en-tête de la requête.</span>\n    <span class=\"token variable\">$token</span> <span class=\"token operator\">=</span> <span class=\"token variable\">$request</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token property\">headers</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'Authorization'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token variable\">$this</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">isValidToken</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$token</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// Si le jeton n'est pas valide, renvoyez une réponse d'erreur 401 Unauthorized.</span>\n      <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Response</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'Unauthorized'</span><span class=\"token punctuation\">,</span> Response<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token constant\">HTTP_UNAUTHORIZED</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token comment\">// Si le jeton est valide, passez la requête au middleware suivant dans la chaîne.</span>\n    <span class=\"token keyword\">return</span> <span class=\"token variable\">$this</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token property\">httpKernel</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">handle</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$request</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$type</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$catch</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">function</span> <span class=\"token function\">isValidToken</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$token</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// Implémentez votre logique de validation de jeton ici.</span>\n    <span class=\"token comment\">// Par exemple, vérifiez si le jeton est valide dans votre système d'authentification.</span>\n    <span class=\"token comment\">// Retourne TRUE si le jeton est valide, sinon FALSE.</span>\n    <span class=\"token comment\">// Ceci est un exemple simplifié, veuillez adapter cette méthode à vos besoins réels.</span>\n    <span class=\"token keyword\">return</span> <span class=\"token variable\">$token</span> <span class=\"token operator\">===</span> <span class=\"token single-quoted-string string\">'mon_jeton_d_authentification_secret'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span></code></pre></div>\n<ul>\n<li>Enregistrez votre middleware dans le service container de Drupal en créant un fichier de service pour votre module.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token comment\"># modules/custom/custom_middleware/custom_middleware.services.yml</span>\n\n<span class=\"token key atrule\">services</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">custom_middleware.middleware</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">class</span><span class=\"token punctuation\">:</span> Drupal\\custom_middleware\\Middleware\\CustomMiddleware\n    <span class=\"token key atrule\">arguments</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'@http_kernel'</span><span class=\"token punctuation\">]</span>\n    <span class=\"token key atrule\">tags</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token punctuation\">{</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> kernel.event_subscriber <span class=\"token punctuation\">}</span></code></pre></div>\n<p>Avec ce middleware en place, chaque requête entrante sera interceptée et traitée par votre middleware. Si un jeton d'authentification valide est présent dans l'en-tête de la requête, la requête sera transmise au middleware suivant dans la chaîne. Sinon, une réponse d'erreur 401 Unauthorized sera renvoyée au client.</p>\n<p>Vous pouvez personnaliser ce middleware selon vos besoins spécifiques, par exemple en ajoutant des vérifications supplémentaires ou en implémentant une logique d'autorisation plus complexe.</p>\n<h2>Avantages des Middlewares API dans Drupal</h2>\n<p>Les middlewares API offrent plusieurs avantages pour les développeurs Drupal :</p>\n<ul>\n<li><strong>Flexibilité</strong> : Les middlewares offrent une flexibilité accrue pour modifier et enrichir les requêtes HTTP en fonction des besoins spécifiques de l'application.</li>\n<li><strong>Réutilisabilité</strong> : Les middlewares peuvent être réutilisés dans plusieurs points de terminaison d'API, ce qui permet de réduire la redondance du code et de favoriser la cohérence.</li>\n<li><strong>Séparation des Responsabilités</strong> : Les middlewares permettent de séparer la logique métier de la gestion des requêtes HTTP, ce qui facilite la maintenance et l'évolutivité de l'application.</li>\n</ul>\n<h2>Conclusion</h2>\n<p>Les middlewares API sont des outils puissants qui permettent de traiter les requêtes HTTP de manière flexible et efficace dans Drupal. En utilisant les middlewares API, les développeurs Drupal peuvent améliorer les performances, renforcer la sécurité et offrir une meilleure expérience utilisateur dans leurs applications web. Avec leur flexibilité, leur réutilisabilité et leur capacité à séparer les responsabilités, les middlewares API constituent un élément essentiel de l'arsenal de tout développeur Drupal.</p>","excerpt":"Middleware API : Gestion Efficace des Requêtes HTTP Dans le développement d'applications web modernes, la gestion efficace des requêtes HTTP est essentielle…","frontmatter":{"date":"2022-07-05","metaDate":"2022-07-05","title":"Middleware API","tags":["Drupal 9","Core feature","Performance","Module development"],"path":"/middleware-api","cover":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDBP/EABYBAQEBAAAAAAAAAAAAAAAAAAACBP/aAAwDAQACEAMQAAABx0k+mXJh/8QAGxABAAAHAAAAAAAAAAAAAAAAAQACEBIhMTL/2gAIAQEAAQUCIHF1JuTX/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQMBAT8BR//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEABj8CX//EABsQAAMAAgMAAAAAAAAAAAAAAAARIQEQMWGR/9oACAEBAAE/IckKykY/Xuog4D//2gAMAwEAAgADAAAAEG/v/8QAFhEAAwAAAAAAAAAAAAAAAAAAAAER/9oACAEDAQE/EGqSf//EABYRAQEBAAAAAAAAAAAAAAAAAAABEf/aAAgBAgEBPxCNf//EABkQAQEBAQEBAAAAAAAAAAAAAAERACExYf/aAAgBAQABPxAeEuVEU43U8k+q4O7geHEWkpv/2Q==","aspectRatio":1.5099533054804621,"src":"/static/e08cdf73f47a21fb5a1982ca17c58150/88110/picture.jpg","srcSet":"/static/e08cdf73f47a21fb5a1982ca17c58150/0b320/picture.jpg 480w,\n/static/e08cdf73f47a21fb5a1982ca17c58150/60b32/picture.jpg 960w,\n/static/e08cdf73f47a21fb5a1982ca17c58150/88110/picture.jpg 1920w,\n/static/e08cdf73f47a21fb5a1982ca17c58150/40175/picture.jpg 2880w,\n/static/e08cdf73f47a21fb5a1982ca17c58150/e58c2/picture.jpg 3840w,\n/static/e08cdf73f47a21fb5a1982ca17c58150/4c335/picture.jpg 6144w","srcWebp":"/static/e08cdf73f47a21fb5a1982ca17c58150/d1a9d/picture.webp","srcSetWebp":"/static/e08cdf73f47a21fb5a1982ca17c58150/bc3bf/picture.webp 480w,\n/static/e08cdf73f47a21fb5a1982ca17c58150/39337/picture.webp 960w,\n/static/e08cdf73f47a21fb5a1982ca17c58150/d1a9d/picture.webp 1920w,\n/static/e08cdf73f47a21fb5a1982ca17c58150/fcbe1/picture.webp 2880w,\n/static/e08cdf73f47a21fb5a1982ca17c58150/c136d/picture.webp 3840w,\n/static/e08cdf73f47a21fb5a1982ca17c58150/e6706/picture.webp 6144w","sizes":"(max-width: 1920px) 100vw, 1920px"},"resize":{"src":"/static/e08cdf73f47a21fb5a1982ca17c58150/c4f3a/picture.jpg"}}}}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"pathSlug":"/middleware-api","locale":"fr","prev":{"fields":{"locale":"fr"},"frontmatter":{"path":"/config-api-vs-state-api","title":"Configuration API vs State API","tags":["Drupal 8","Drupal 9","Backend","Configuration","State"]}},"next":{"fields":{"locale":"fr"},"frontmatter":{"path":"/queue-api","title":"Queue API","tags":["Drupal 9","Drupal 10","backend","Module development"]}}}}}