PythonでWebAPIを作成してHerokuにデプロイするまで
何やったの
タイトルの通りにPythonの勉強の一環としてFlaskFWを使ってWEBAPI(仮)を作りました。
Herokuにデプロイしてアプリケーションを実行するまで結構詰まったので備忘録的に書きます。
作ったもの
https://commic-lover.herokuapp.com/
楽天BooksAPIを単にwarpして自分が好きなタイトルの漫画だけをJSON形式で返してくれるというもの。
楽天BooksAPIのレスポンスが遅いのでHerokuのdynoが休眠状態にあるかどうかにかかわらず遅い。
本当はAPIの実行結果をDBに蓄積していくまでやりたかったけどとりあえず目的は果たせた。
というかエラーページすら作っていないし、今月分の新刊情報しか持ってこれていないので作り込みが必要。
FlaskでAPI作成
これはqiitaの記事にも散々あるし公式のdocを眺めていれば作れるので割愛。
一つ気をつけたいのがHerokuでサブディレクトリをデプロイするときはめんどくさいので全部ルートディレクトリに作成した方が簡単。
サブディレクトリを作成したい人はこちらの stack overflowの記事を参照。
私はHerokuCLIを使わずにGUI上で全て完結させたかったのでやらなかった。
Herokuにデプロイ
Procfile
Procfileをルートディレクトに作成する。
https://devcenter.heroku.com/articles/python-gunicorn
Pythonの場合はgunicornを使うことが多いというか他の選択肢がdocになかったので従った。
web: gunicorn app:app
中身は至ってシンプル。ここで --chdir オプションでサブディレクトリに移動できたりもするらしい(未検証)。
requirement.txt
次に requirements.txtの作成。
pip freeze > requirements.txt
venvとか使っていないとpipで入れたモジュールが全て出力されてしまってPython触り立ての時は混乱した。
デプロイ
今回はGUIからやる。お手軽デプロイで時間短縮。
右上「 New」ボタンから「Create app」を選択。
好きなアプリケーション名を入力。Herokuの場合URLになる部分。
GitHubにPush済みなので connect to GitHub を選択。
あとはデプロイしたいブランチ等を選択。
Enable Automatic Deploys を ONにしておくとGitHubにpushされる度にビルドとデプロイをしてくれるのでONにすると便利。
あとは、Buildを待つだけでデプロイ完了です。
https://{アプリケーション名}.herokuapp.com/