1/27~1/31で技術的にやったこと
FastAPIってソース変更したら即反映してくれるらしい
開発モードで実行すると、コードの変更が即時反映(ホットリロードされる)仕様があるらしい
FastAPIはUvicornというASGIサーバーを使っていて、オプションで--reload
をつければホットリロードが有効になるらしい。
改めてPythonのフレームワークを再確認してみる
FW | 特徴 | メリット | デメリット | 適した状況 |
---|---|---|---|---|
Django | フルスタックなWebフレームワーク。ORMや認証、管理画面が標準装備 | 開発が高速(管理画面、認証、フォーム処理など組み込み機能が豊富)分業しやすいので大規模開発に向いている。エコシステムが豊富(Django REST Framework など) | 標準機能に従う必要があるため自由度が低い。軽量な用途にはオーバーヘッドが大きい | 管理画面を伴う CMS、大規模アプリ |
Flask | 軽量なマイクロフレームワーク | シンプルで軽量、柔軟性が高い | 標準の機能が少ない(認証、管理画面、ORM などは自前で用意)、設計にばらつきが出やすい | 小規模なAPIサーバ、個人開発 |
FastAPI | 非同期対応のフレームワーク、自動ドキュメント生成 | 高速、型安全、非同期処理に強い、Swagger/OpenAPIが自動生成 | まだ発展途上、リクエストとレスポンスのスキーマを強制 | 非同期処理が必要な API 開発に最適 |
Flaskが軽量と呼ばれる理由は?
- Djangoと比べると標準で含まれている機能が少ないので不要なオーバーヘッドを減らせて軽量かつ柔軟な構成で立ち上げれる
- Flaskはデフォルトで開発用の簡易サーバーしか提供していないらしい。だから本番運用をする際はNginx や Gunicorn を用意する必要がある
- 非同期処理が前提で実装されていなく、シングルスレッドで同期処理が前提のFWになっているから不要なオーバーヘッドが少ない
- ディレクトリ構成が自由だから無駄なフォルダやファイルを作成する必要がない
FastAPIが高速と呼ばれる理由は?
- 非同期(async/await)を標準でサポートしているので同時に複数のリクエストを捌けるのでシングルスレッドが基本のFlaskとDjangoよりもはやい(Django3.1からも非同期に対応しているらしい)
WSGIサーバー ってなんだっけ?
WSGIとはWeb Server Gateway Interfaceの略で、Pythonで書かれたアプリケーションとWEBサーバーのインターフェースを定義したものです。 WSGIの詳細はPEP 3333で定義されています。
引用文
基本的には同期処理だから1リクエストずつ処理するらしい。
並列処理するにはマルチスレッドやプレセスで処理するんだって。
ASGIサーバーってなんだっけ?
ASGIとはAsynchronous Server Gateway Interfaceの略で、外部からリクエストを受け取り処理するためのインターフェース。
非同期処理を実装可能。単一プロセスで並列処理が可能。
WebSocketやgRPC,Server-Sent Events(SSE)などがサポートありらしい。
WSGIを拡張して非同期処理に対応できるようにしたらしい
ASGIサーバーとしては、以下があるらしい
- Daphne
- Granian
- Hypercorn
- NGINX Unit
- Uvicorn
Starletteとは?
ASGIに最適化された軽量FWでFastAPIのコア部分を支えている
ASGI自体はインターフェース(仕様)として定義されていて、StarletteはASGIの仕組みを簡単に使えるようにしたライブラリらしい。
具体的な実装は Starlette などの ASGI フレームワークが担う。
正規表現のキャプチャグループの 定義の仕方の話
キャプチャグループとは?
正規表現の中で ()
で囲まれた部分のこと
正規表現で()を使うとその部分にマッチした文字列をm.group(n)で取得することができる
なので、()で定義していない文字列を含む場合、()はキャプチャグループとして認識されないので、固定値などはスキップされると。
固定値でm.groupで取りたい場合はキャプチャグループに入れないとダメ
Discussion