ASGI とは
ASGIとはWSGIと呼ばれるPythonのWebサーバとWebアプリケーションが通信するためインタフェース定義の後継仕様となっており、WebSocketと非同期をサポートするように設計されているものです。
ASGI(Asynchronous Server Gateway Interface):非同期サーバーゲートウェイインターフェースです。
まずはWSGIとは以下のようになっています。
WSGIアプリケーションにはapplication関数を定義します。WSGIサーバからはenvironとstart_responseが渡ってくるのでenvironを用いてレスポンスのボディとなるバイトのリストを返します。
・受信したリクエストに関する情報を含む辞書(envrion)
・WSGIアプリケーションから呼び出されるコールバック関数(start_response)
def application(environ, start_response):
start_response(
"200 OK",
[("Content-Type", "text/plain")]
)
return [b"Hello, World"]
ASGIインタフェースの仕様としてはASGIサーバから以下の3つの引数を受け取るapplication関数をASGIアプリケーションに定義します。
・受信したリクエストに関する情報を含む辞書(scope)
・ASGIサーバからのボディの情報を受け取る(receive)
・ASGIサーバへ応答の開始と応答の本体を送る(send)
async def application(scope, receive, send):
await send({
"type": "http.response.start",
"status": 200,
"headers": [
[b"content-type", b"text/plain"],
]
})
await send({
"type": "http.response.body",
"body": b"Hello, World",
})
# scopeの例
scope = {
"type": "http",
"method": "POST",
"path": "/",
"query_string": b"a=b",
}
# receiveの例
receive = {
"type": "http.request.body",
"body": b'{"example": "JSON data"}',
"more_body": False,
}
この記事が気に入ったらサポートをしてみませんか?