Article

Pythonを少しキャッチアップする

※ 商品リンクから購入されると少額の報酬が発生することがあります。

Pythonが流行っているらしいので、ちょいとキャッチアップしちゃう。

頭の中はDjangoなので、FastAPIとSQLAlchemyあたりをさらりと。非同期ね

Starlette

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

Pydantic

  • 型ヒント使ったベースというイメージしかないが

  • 型ヒントを使ってバリデーションできる。dictとPydanticのクラスで行き来を簡単にさせられそう

  • 型が違ったら例外送出

    • Pythonの型ヒントは実行時には作用せず単にチェックができるだけなのだけれど、Pydanticは実行に関与できる

  • コアバリデーションロジックはRustで実装されていて速い

    • そんなにー?、と思ったらuv使ってみるべし。pipとuv比べると速度の違いがバリやばい

    • ならPython使うなよという話はあるけれど、Pythonはずっと前からC APIに助けられていて「スピードが必要な処理は別言語で書く、組み合わせて現実に適応させる部分は簡単で自由の効くPythonで書く」ということをしてきた言語である。グルー言語ってやつ

    • ただ、少し前にPydanticに依存しているライブラリを使っているプロジェクトに関わって、バージョン2以前か以後かみたいなところでビルドで困った記憶がある

  • 究極的にはLLに型っているんだっけ?というお気持ち対決になる

  • Pydanticと同じとこが作っているlogfire はFastAPIとか他でも使えるので使うと良いよと書いてある。Observabilityできるっぽい

    • https://pydantic.dev/pricing

    • logfireは有料(ただし、1Mという単位までは無料なので試してみるには良さそう)

    • データはlogfireに送られるのでしっかり検討する必要がある

    • あとでちゃんと見る

SQLAlchemy

SQLAlchemy

  • ドキュメント を読む

  • Unit of WorkがJavaのhibernateを参考にしているというところが気になる。ORMやCoreのエンジンといったアプリケーション側の層で勝手に判断しないでほしいんだよな。指示した通りに動いてほしい。実際はどうかなー。パッと見、sessionがキモい気がしちゃう

とりあえずこの辺のコードを眺めていくと良さそう

  • Tiangolo/Full Stack FastAPI and PostgreSQL

    • FastAPIの作者が開発した、API開発に役立つテンプレートプロジェクトらしい。FastAPIとSQLAlchemyを使って構築されたバックエンドと、Reactによるフロントエンドのインターフェースが含まれているとのこと。ユーザー認証やOAuthの実装、テスト設定などが盛り込まれており、フルスタックのWebアプリケーションの構築に最適

  • Encode/Starlette-Examples

    • StarletteはFastAPIのバックボーンであり、FastAPIとSQLAlchemyの組み合わせを使った基本的な例も公式リポジトリに含まれているらしい。FastAPIの基本を学びたい場合に役立つ模様

  • FastAPI CRUDRouter

    • FastAPIのCRUD操作を簡単にするための拡張機能。SQLAlchemyと組み合わせて、CRUD操作を簡潔に構築できる。特に、APIの基本操作(Create, Read, Update, Delete)を素早く実装したい場合に参考になるっぽい

  • InvenTree

    • InvenTreeは、在庫管理システムのOSSで、 ~~FastAPIとSQLAlchemyをバックエンドに採用しているらしい~~ ← 生成AIに嘘つかれた。思いっきりDjango + DRFだった。

  • FastAPI Users

    • ユーザー管理のためのプラグインで、FastAPIでの認証とSQLAlchemyのデータベース管理を組み合わせた実装。ユーザー認証、OAuth、JWT認証など、ユーザー管理に関連する部分を提供しているので、ユーザー認証の実装に特化したAPIの構築に役立つ

Prev Entry

Next Entry