※ 商品リンクから購入されると少額の報酬が発生することがあります。
Pythonが流行っているらしいので、ちょいとキャッチアップしちゃう。
頭の中はDjangoなので、FastAPIとSQLAlchemyあたりをさらりと。非同期ね
Starlette
ASGI framework
テストクライアントなどもある
依存は anyio のみっぽい
anyioは "AnyIO is an asynchronous networking and concurrency library" that works on top of either asyncio or trio.
似たものに curio というものもあるようだけれど、それ以降にanyioは出てきたっぽいので、anyioを知っておけば良さそう
利用する機能によって以下のライブラリに依存する
httpx - Required if you want to use the TestClient.
CLIコマンドとしても使えるし、だいぶ便利っぽい。今時の機能に加えて、requestsのメジャーな機能は持ってきてるっぽいので、常用していこう
jinja2 - Required if you want to use Jinja2Templates.
慣れてるので特段気にすることはない
python-multipart - Required if you want to support form parsing, with request.form().
itsdangerous - Required for SessionMiddleware support.
認証周りに必要なものはやってくれそう。ライブラリ名良い。この辺は自分でやらない方が良い
pyyaml - Required for SchemaGenerator support.
Pydantic
型ヒント使ったベースというイメージしかないが
型ヒントを使ってバリデーションできる。dictとPydanticのクラスで行き来を簡単にさせられそう
型が違ったら例外送出
Pythonの型ヒントは実行時には作用せず単にチェックができるだけなのだけれど、Pydanticは実行に関与できる
コアバリデーションロジックはRustで実装されていて速い
そんなにー?、と思ったらuv使ってみるべし。pipとuv比べると速度の違いがバリやばい
ならPython使うなよという話はあるけれど、Pythonはずっと前からC APIに助けられていて「スピードが必要な処理は別言語で書く、組み合わせて現実に適応させる部分は簡単で自由の効くPythonで書く」ということをしてきた言語である。グルー言語ってやつ
ただ、少し前にPydanticに依存しているライブラリを使っているプロジェクトに関わって、バージョン2以前か以後かみたいなところでビルドで困った記憶がある
究極的にはLLに型っているんだっけ?というお気持ち対決になる
Pydanticと同じとこが作っているlogfire はFastAPIとか他でも使えるので使うと良いよと書いてある。Observabilityできるっぽい
logfireは有料(ただし、1Mという単位までは無料なので試してみるには良さそう)
データはlogfireに送られるのでしっかり検討する必要がある
あとでちゃんと見る
SQLAlchemy
ドキュメント を読む
Unit of WorkがJavaのhibernateを参考にしているというところが気になる。ORMやCoreのエンジンといったアプリケーション側の層で勝手に判断しないでほしいんだよな。指示した通りに動いてほしい。実際はどうかなー。パッと見、sessionがキモい気がしちゃう
とりあえずこの辺のコードを眺めていくと良さそう
Tiangolo/Full Stack FastAPI and PostgreSQL
FastAPIの作者が開発した、API開発に役立つテンプレートプロジェクトらしい。FastAPIとSQLAlchemyを使って構築されたバックエンドと、Reactによるフロントエンドのインターフェースが含まれているとのこと。ユーザー認証やOAuthの実装、テスト設定などが盛り込まれており、フルスタックのWebアプリケーションの構築に最適
StarletteはFastAPIのバックボーンであり、FastAPIとSQLAlchemyの組み合わせを使った基本的な例も公式リポジトリに含まれているらしい。FastAPIの基本を学びたい場合に役立つ模様
FastAPIのCRUD操作を簡単にするための拡張機能。SQLAlchemyと組み合わせて、CRUD操作を簡潔に構築できる。特に、APIの基本操作(Create, Read, Update, Delete)を素早く実装したい場合に参考になるっぽい
InvenTreeは、在庫管理システムのOSSで、 ~~FastAPIとSQLAlchemyをバックエンドに採用しているらしい~~ ← 生成AIに嘘つかれた。思いっきりDjango + DRFだった。
ユーザー管理のためのプラグインで、FastAPIでの認証とSQLAlchemyのデータベース管理を組み合わせた実装。ユーザー認証、OAuth、JWT認証など、ユーザー管理に関連する部分を提供しているので、ユーザー認証の実装に特化したAPIの構築に役立つ