Maker Faireへの出展物にWeb API化したいものがあり、軽量なFlaskを採用した。 以前Djangoを使用して個人的なプロダクトを作ったことがあったので、比較対象としてFlaskの名前は聞いたことがあったが触るのは初めてだった。 Djangoに比べると軽量に使えるものであり、用途が限定されているものであったらすぐにFlaskで作成し見せられる状態まで持っていくことが可能であると感じた。
自分が触った機能のメモを残しておく。
インストール
Pythonnにはおなじみのpipコマンドでインストールが可能である。
pip install flask
Hello world
公式からのサンプルコードとして載っているものを借りる。
今回は次のコードをserver.pyとして、python server.pyで起動する。
ブラウザからhttp://localhost:5000にアクセスすると、Hello World!が返却される。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "Hello World!"
if __name__ == '__main__':
app.run()
パラメーターの受け取り
パラメータの受け取りは、from flask import requestを使う必要がある。
自分はpip install requestsで提供されているものと勘違いして躓いてしまった。
request.args.get('search_word') でhttp://localhost:5000/?search_word=hatenaとアクセスされたhatenaが受け取れる。
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/')
def hello_world():
search_word = request.args.get('search_word')
return search_word
if __name__ == '__main__':
app.run()
外部からのアクセスに対応する
Flaskはデフォルトで起動すると、localhostからのアクセスしか対応していない。
本番で出展するときはFlaskを動作させているサーバ内部だけで処理が完結するものではあるのだが、テストを容易にするため外部からのアクセスも可能としたい。
このときの対応も非常に簡単で設定ファイルをいじることもなく、app.run()の引数をapp.run(host='0.0.0.0')とするだけでよかった。
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/')
def hello_world():
search_word = request.args.get('search_word')
return search_word
if __name__ == '__main__':
app.run(host='0.0.0.0')
これだけの作業でWeb APIが作られることを魅力的に感じた。 リッチなフレームワークを使うと様々なことを実現できることも理解しているが、大量の設定ファイルやコマンドを実行することになり、使用する前段階での理解する時間が大量に必要だった。その結果、本当にやりたい作業までなかなかたどり着けないことがあった。 Flaskを使うと理解する時間の大幅な短縮が見込めるので、まずはどんどん自分のやりたいことを実現し、そのうえで別のフレームワークが必要と感じたら移行を検討していくことが大切であると感じた。