他の WEB サイトと連携する WEB アプリを開発していますが、連携テストをする必要がありました。
単体のリクエストでなく、WEB サイトに何度か GET/POST するようなシーケンスであり、cgi ではやりづらいです。
python には、wsgiref などといったモジュールがありますが、まあまあ面倒ですし、プロダクションレベルで使えるものではなさそうです。apache や nginx といった WEB サーバなしで単体で WEB サーバとして動くようなモジュールが無いのかなあ、と思い検索してみました。
探してみると responder というフレームワークがありました。
これは私のニーズにマッチしていました。
- uvicorn という WEB サーバが内蔵されていて、コードを実行すれば WEB サーバとして起動する
- Flask-style route expression – URL の指定が簡単
- フォーム値や、POST データの取得や、レスポンスの作成が簡単
- テンプレートが使える
WEB アプリを作ったことがある人なら、Quick Start を見れば、一瞬でファンになることでしょう。
DB アクセスに関してはORM は無いので必要なら何かモジュールを使うことになるでしょう。今回は、簡単なテスト用アプリだったので、pymysql で十分でした。
他にも、既存の WSGI / ASGI アプリがマウントできるなど、試してみたい機能もあります。
python で本格的な WEB アプリケーションを開発するなら、django のような Web Application Framework のほうがよいと思いますが、軽量な WEB サーバや、バックエンドサーバなどを構築するのであれば、responder は非常に使い勝手が良い印象です。
改造しようとしていたコードは多少はテストに役に立った python コードではありました。標準ライブラリには、wsgiref という、いまいち単体では使いづらいリファレンス実装しかなく、かといって、django といった機能が盛り沢山のフレームワークを使うほどでもありません。python にこだわる必要もないよなあ、捨てて他のもので書き直すべきなのかなあ、と思いましたが、そこまでする時間もなかったので、非常に助かりました。
ありがとう、作者さん!