L'aiohttp és una biblioteca de programari lliure per al llenguatge Python que proporciona un client i un servidor HTTP completament asíncrons. Forma part del projecte aio-libs, un conjunt de biblioteques basades en asyncio orientades a la concurrència. Està construïda sobre sòcols no bloquejants i s'integra amb el mòdul asyncio de Python, de manera que permet fer i atendre peticions HTTP sense aturar el bucle d'esdeveniments de l'aplicació. El nom és l'abreviació de l'expressió anglesa Asynchronous HTTP Client/Server for asyncio and Python.

Motivació A diferència de biblioteques HTTP tradicionals com requests, que utilitzen sòcols bloquejants, l'aiohttp està dissenyada per funcionar dins d'un model de programació asíncrona. Quan s'utilitza una biblioteca bloquejant des de codi asíncron, la crida atura el fil d'execució; com que asyncio funciona en un sol fil, qualsevol operació bloquejant deté tot el bucle d'esdeveniments fins que la petició acaba, fet que anul·la els avantatges de la concurrència. Per aconseguir una concurrència real cal una biblioteca no bloquejant fins a la capa del sòcol, problema que l'aiohttp resol. Això la fa especialment adequada per a aplicacions que fan moltes peticions web simultànies, com ara en arquitectures de microserveis o en tasques de rastreig web.

Client El client es basa en el concepte de sessió, representat per la classe ClientSession, que manté obertes diverses connexions reutilitzables. Aquest mecanisme, conegut com a agrupació de connexions (connection pooling), és clau per al rendiment, ja que crear connexions consumeix recursos i reutilitzar-les en redueix el cost. Per aquest motiu, la pràctica habitual és emprar una única sessió per a tota l'aplicació. La sessió també gestiona internament les galetes i les capçaleres. L'aiohttp permet establir temps d'espera (timeouts) granulars, tant a escala de sessió com de petició individual, mitjançant l'estructura ClientTimeout.

Servidor A més del client, l'aiohttp permet crear servidors web preparats per a asyncio i construir interfícies de programació (API) RESTful. Les rutes es defineixen amb decoradors associats a corutines, i l'aplicació s'inicia creant una instància de la classe Application i executant-la. També ofereix suport per a WebSockets tant en el client com en el servidor.

Referències

Categoria:Biblioteques de Python