Gestion des requêtes HTTP grâce aux agents HTTP

Dans 4D 19 R6, nous avons introduit les classes HTTP pour moderniser la syntaxe et améliorer les fonctionnalités de nos commandes du client HTTP. S’appuyant sur cette base, 4D 20 R6 apporte une nouvelle fonctionnalité puissante : les agents HTTP. Ces agents permettent aux développeurs de personnaliser et d’optimiser leurs connexions aux serveurs HTTP en gérant la persistance et la réutilisation des connexions pour les requêtes HTTP.

HDI Gestion des requêtes HTTP avec les agents HTTP

Comprendre les agents HTTP

Si vous devez effectuer plusieurs requêtes auprès du même serveur HTTP, vous préféreriez les optimiser à la fois pour le client et pour le serveur. L’une des méthodes les plus courantes consiste à conserver une connexion unique pour toutes les requêtes afin de ne pas avoir à négocier une nouvelle connexion entre les requêtes, en particulier une connexion sécurisée. C’est là que les agents entrent en jeu, car ils gèrent la réutilisation des connexions afin d’optimiser vos requêtes.

Tout d’abord, il est important de savoir que même si vous ne changez rien dans votre code, vous bénéficierez des agents : tous vos HTTPRequests utiliseront un agent par défaut si vous n’en fournissez pas. Cet agent gérera la persistance de vos connexions à travers un simple mécanisme de keep-alive, de sorte que lorsque vous envoyez plusieurs requêtes au même serveur, il réutilisera les connexions si possible au lieu d’en créer une nouvelle pour chaque requête.

Cet agent par défaut est le plus simple que vous puissiez imaginer, mais vous pouvez (et devriez) créer votre propre agent. Les agents peuvent vous permettre d’affiner vos connexions, en vous donnant le contrôle sur le mécanisme de keep-alive, en vous permettant de choisir le nombre maximum de connexions simultanées à un serveur spécifique, en ajoutant des timeouts pour éviter de garder les connexions indéfiniment ou même en configurant vos connexions TLS/SSL au niveau de l’agent au lieu de le faire pour chaque HTTPRequest.

L’utilisation d’un agent pour HTTPRequest est extrêmement simple ; il suffit d’utiliser ce bout de code :

var $requestOptions:={/*here you put the agent options*/}
var $myAgent:=4D.HTTPAgent.new($requestOptions)

var $requestOptions:={} 
$requestOptions.agent:=$myAgent
var $myRequest:=4D.HTTPRequest.new("www.4D.com"; $requestOptions)

Conseil 1

HTTPAgent est un objet partagé. Par conséquent, vous pouvez en ajouter un à une classe singleton afin d’utiliser le même agent pour toutes les requêtes adressées au même serveur.

Conseil 2

Vous pouvez demander à plusieurs serveurs d’utiliser le même agent. Dans ce cas, chaque serveur aura son propre pool de connexions utilisant les mêmes options d’agent.

Avec les agents, les classes HTTP couvrent désormais toutes les fonctionnalités des commandes HTTP et même plus, c’est donc le bon moment pour passer entièrement à cette nouvelle syntaxe. Si vous avez des questions sur les classes HTTP ou les agents en particulier, n’hésitez pas à les poser sur le forum 4D.

Nicolas Brachfogel
- Product Owner & Senior Developer - Nicolas Brachfogel a rejoint 4D en 2017 en tant que développeur senior (4D Server et networking) et en tant que Product Owner pour gérer la mise en production d'Apple Silicon. Il est chargé de rédiger les user stories et de les traduire en spécifications fonctionnelles, ainsi que de s'assurer que les implémentations des fonctionnalités répondent aux besoins des clients. Diplômé de l'Institut Supérieur d'Informatique Appliquée (INSIA), Nicolas a commencé sa carrière en tant que développeur de logiciels en 2001. Après plusieurs années de programmation en Java et C++, il s'est spécialisé dans le développement client-serveur pour des sociétés de jeux vidéo. En tant que développeur/architecte serveur, il a travaillé avec succès sur les architectures serveur de nombreux jeux (Dofus Arena, Drakerz, Trivial Pursuit Go !).