responderで理解するWebサーバー #9 ORMとHTTP Client

こんにちは、Webエンジニアのjuri-tです。

responderが非同期でリクエストを処理できることは以前紹介させていただきました。

では、実際に非同期の処理を行う際、どういったライブラリが選択肢に入るかを紹介したいと思います。(本格的に業務で運用したりはしていないため、紹介程度になります)

HTTP クライアント

他のWebサービスのAPIを使ったり、マイクロサービスとの通信するなどでHTTPリクエストを送ることはあると多いと思います。ネットワークを超える処理は、超えない他の処理に比べて時間がかかるところなので、asyncioに対応しているライブラリを使いましょう。使わないとパフォーマンスを最大限使えないですからね。

人間のためのHTTPクライアントのrequestsパッケージと同じように使えるライブラリです。内部的にはhttpxというライブラリを使っているようですが、一部機能はまだ実装中のようです。(Basic認証とか、プロキシとか)


ORM(Object-Relational Mapping)

私が調べた感じでは、Pythonでデファクトスタンダードと呼べる非同期のORMライブラリはまだなさそうですが、ここでは3つ紹介します。

1. async-sqlalchemy
2. GINO
3. tortoise-orm

async-sqlalchemy

非同期ではないORMとしては、デファクトスタンダードとなっているSqlalchemyのasync版です。普通に考えると一番の有力候補な気がするんですが、Githubのページは404になりますね。

GINO

GINOもSqlalchemy-Coreをベースにしている非同期型のライブラリのようです。not a ORMと書いてますが・・どうなんでしょう。GINO自体はORMじゃなくても見る限りSqlalchemyのように使えそうな印象です。

dockerでMySQLを立てて試そうとしたんですが、どうやらまだMySQLはサポートしていないみたいですね・・。(PostgreSQLはサポートしているよう)

Python3でmysqlclientを入れるのに手こずってissueを見つけてやっと接続できるかと思った矢先の出来事でした。MySQLを使いたい場合は対応を待ちましょう。

tortoise-orm

responderでORMを使うならどれ?というissueに対してtortoiseというライブラリが薦められていますが、まだversion 1.0に向けて機能を絶賛開発中のライブラリでまだ破壊的変更もあるでしょうし、本番で使うにはまだまだリスクは高そうです。ちなみに以前触ったときに、MySQLは使えました。

まとめ

というわけで、今回はソースコードはなく短めのライブラリの紹介でした。responderはせっかくの非同期のフレームワークなんですが、RDBとの接続のライブラリはもう少し頑張っていきたい感じがありますね。立ち上げのタイミングなどはORMが使えるとやっぱりサクサク開発進められますし。RDBを使う要件があるときは、responderを採用する判断は慎重になったほうが良さそうです。Pythonの非同期系のライブラリもどんどん充実していくと良いですね〜

ではでは〜


サポートありがとうございます。頂いたご支援は美味しいものを食べに行きます。