Gerir pedidos HTTP com agentes HTTP

Em 4D 19 R6, introduzimos classes HTTP para modernizar a sintaxe e melhorar as funcionalidades para nossos comandos de cliente HTTP. Construindo sobre essa base, 4D 20 R6 traz uma nova e poderosa caraterística: Agentes HTTP. Esses agentes capacitam os desenvolvedores a personalizar e otimizar suas conexões com servidores HTTP gerenciando a persistência de conexão e reutilização para pedidos HTTP.

HDI Gerenciando Pedidos HTTP com Agentes HTTP

Entendendo os agentes HTTP

Se você tiver que executar várias solicitações para o mesmo servidor HTTP, talvez queira otimizá-las tanto para o cliente quanto para o servidor. Uma maneira comum de fazer isso é manter uma única conexão para todas as solicitações, para que não seja necessário negociar uma nova conexão entre as solicitações, especialmente uma conexão segura. É aí que os agentes entram em ação, pois eles lidam com a reutilização de conexões para otimizar suas solicitações.

Antes de mais nada, é importante saber que, mesmo que não altere nada no seu código, beneficiará dos agentes: todos os seus HTTPRequests utilizarão um agente predefinido se não fornecer um. Este agente irá gerir a persistência das suas ligações através de um mecanismo simples de “keep-alive”, por isso, quando enviar vários pedidos para o mesmo servidor, irá reutilizar as ligações, se possível, em vez de criar uma nova para cada pedido.

Este agente predefinido é o mais simples que pode imaginar, mas pode (e deve) querer criar o seu próprio agente. Os agentes podem permitir-lhe afinar as suas ligações, dando-lhe controle sobre o mecanismo keep-alive, permitindo-lhe escolher o número máximo de ligações simultâneas a um servidor específico, adicionando timeouts para evitar manter as ligações indefinidamente ou mesmo configurando as suas ligações TLS/SSL ao nível do agente em vez de o fazer para cada HTTPRequest.

Usar um agente para um HTTPRequest é extremamente fácil; basta usar este pedaço de código:

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)

Dica 1

HTTPAgent é um objeto partilhado. Consequentemente, pode adicionar um a uma classe singleton para utilizar o mesmo agente para todos os seus pedidos ao mesmo servidor.

Dica 2

Pode efetuar pedidos a vários servidores utilizando o mesmo agente. Nesse caso, cada servidor terá o seu próprio conjunto de ligações utilizando as mesmas opções de agente.

Com os agentes, as classes HTTP cobrem agora todas as funcionalidades dos comandos HTTP e ainda mais, pelo que é uma boa altura para mudar completamente para esta nova sintaxe. Se tiver quaisquer perguntas sobre classes HTTP ou agentes especificamente, não hesite em postá-las no fórum 4D.

Nicolas Brachfogel
• Proprietário do produto e Desenvolvedor Senior -Nicolas Brachfogel entrou a 4D em 2017 como Senior Developer (4D Server e Networking). Como Product Owner para gerenciar o lançamento de Apple Silicon, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais, além de garantir que as implementações de funcionalidade cumpram com as necessidades do cliente. Diplomado pelo Instituto Superior de Informática Aplicada (INSIA), Nicolas começou sua carreira como desenvolvedor de software em 2001. Depois de vários anos codificando em Java e C++, passou a especializar-se no desenvolvimento cliente-servidor para empresas de videogames. Como desenvolvedor/arquiteto de servidores, trabalhou com sucesso nas arquiteturas de servidores de muitos jogos (Dofus Arena, Drakerz, Trivial Pursuit Go!)