Using the aiohttp client¶
Safir helps you manage a single aiohttp.ClientSession
for your application.
Using a single HTTP client improves performance by reusing connections.
Setting up the aiohttp.ClientSession¶
To initialize the client, add safir.http.init_http_session
as a cleanup context to your root application:
def create_app() -> web.Application:
root_app = web.Application()
root_app.cleanup_ctx.append(init_http_session)
return root_app
The cleanup context ensures that the client session is closed when the application shuts down.
Using the ClientSession¶
init_http_session
attaches the session to the safir/http_session
key of the application.
Accessing the session directly from the app:
http_session = app["safir/http_session"]
response = await http_session.get("https://keeper.lsst.codes")
Inside a request handler, use config_dict
:
@routes.get("/")
async def get_index(request: web.Request) -> web.Response:
http_session = request.config_dict["safir/http_session"]
response = await http_session.get("https://keeper.lsst.codes")
data = await response.json()
return web.json_response(data)