詳解ASGIミドルウェア シンプルながらも奥が深いASGIミドルウェアを使いこなす
PythonにはASGIと呼ばれる非同期Webインターフェース仕様があり、FastAPI、Django、Starletteなど多くのWebアプリケーションフレームワークはこのASGIの仕様に沿ったASGIアプリケーションとして動作しています。そのため、Pythonで本格的なWebアプリケーションを開発するためには、ASGIに対する理解は極めて重要です。
本発表で取り上げるASGIミドルウェアは、すべてのリクエストに対する共通処理を実装できるASGIのサブ仕様のひとつです。ASGIサーバに対してASGIアプリケーションのように振る舞い、ASGIアプリケーションに対してASGIサーバのように振る舞うASGIミドルウェアは、ASGIの全てが詰まっていると言っても過言ではありません。
本発表ではシンプルながらも奥が深いASGIミドルウェアについて、実践的なコード例を交えて解説します。現時点では以下の流れを想定していますが、具体的なパターンの詳細などは一部変更する可能性もあります。
- ASGIの概要
- ASGIミドルウェアの定義
- ASGIミドルウェアの実装パターンと実装時の注意点
- 基本編
- エンドポイントの処理時間計測: シンプルな例
- ヘルスチェックへの応答: ミドルウェアでのレスポンス返却
- HTTPヘッダーを用いた認証: リクエストの検証、リクエストハンドラとのデータ共有
- 応用編
- HTTPボディの利用: ストリームの再構築
- アプリケーション起動時、終了時の処理: Lifespan
- WebSocketの利用
- 基本編
- まとめ
ASGIミドルウェアはアイディア次第で用途が広がります。
そのしくみを正確に理解し、使いこなしていきましょう。
このトピックに関するあなた自身の経験を教えてください
FastAPIを使ったWeb API開発は2020年から継続して行っています。
データベースを持たないシンプルなBFFから王道であるREST API、WebSocketやGraphQLを使ったリアルタイムサーバまで関わってきたプロジェクトは多岐に渡りますが、いずれも継続的な運用と開発を続けています。
また、これらの経験から2023年8月にはWEB+DB PRESS Vol.136特集記事「Python最新Web開発 FastAPI+SQLAlchemyで非同期処理」の執筆も行いました。
この発表を通じて、参加者とどんな議論が可能ですか?
ASGIミドルウェアのようにレイヤーを重ねるしくみは、言語を問わず多くのWebアプリケーションフレームワークに共通しています。
様々な言語やフレームワークの利用者とお互いの経験をベースにした話ができ、ミドルウェアの活用に関する新たなアイディアが生まれるかもしれません。
尾道が好きになり東京から尾道の向島に引っ越してきたフルリモートのプログラマ。学生時代からずっとPython好き。シンプルなコード、シンプルな設計を目指してます。最近はRustもよく書いてる。「Python実践入門」の著者。
- X: rhoboro
- GitHub: rhoboro
- ブログ: https://www.rhoboro.com/