Flaskとは
Flaskとは、pythonのWebフレームワークです。 軽量なWebフレームワークであり、小さく使い始めることができるのが特徴です。 公式でも"microframework"と銘打っています。
Welcome | Flask (A Python Microframework)
同じpythonのフレームワークとしてはDjangoやも挙げられますが、Djangoはフルスタックなフレームワークなので、規模が大きめのWebアプリケーション作成に向いている気がします。
Usage
例によってpip
でインストールできます。
$ pip install Flask
Anacondaで管理したい人はconda
でも良いでしょう。
$ conda install -c anaconda flask
Source & Demo
Hello, World!
まずは Hello World
から!
# hello.py from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!"
サーバを立ち上げてみましょう。
$ FLASK_APP=hello.py flask run
ローカルサーバーが立ち上がるので、ブラウザで開くとHello, Worldが表示されるのがわかります。
またアプリの実行はスクリプト上でも行うことができます。
# hello.py from flask import Flask app = Flask(__name__) app.run(host="127.0.0.1", port=5000)
$ python hello.py
APIの定義
次はAPIを提供してみましょう。
FlaskではAPIの定義も簡単に行なえます。
from flask import Flask, request, jsonify, make_response app = Flask(__name__) @app.route("/hoge", methods=['GET']) def getHoge(): # URLパラメータ params = request.args response = {} if 'param' in params: response.setdefault('res', 'param is : ' + params.get('param')) return make_response(jsonify(response)) @app.route("/hoge", methods=['POST']) def postHoge(): # ボディ(application/json)パラメータ params = request.json response = {} if 'param' in params: response.setdefault('res', 'param is : ' + params.get('param')) return make_response(jsonify(response)) app.run(host="127.0.0.1", port=5000)
@app.route
デコレータの引数にパス・メソッド種別を指定しています。
Hello Worldのときはtext/plain
を返していましたが、今回はapplication/json
(JSON形式)でレスポンスを返しています。レスポンスをJSONにするには、jsonify
関数を使って作成したJSON型データをmake_response
関数の引数に渡し、それをAPI関数の返り値とします。
make_response
はレスポンスヘッダ及びレスポンスボディの情報を持つオブジェクトを作成します。このオブジェクトを介して、リクエストヘッダやボディの編集を行うことができます。
body = { "param" : "hoge"} response = make_response(jsonify(body)) response.headers['X-HogeHoge'] = 'hoge...' # 新しいヘッダ属性を追加
指定したパスに対してリクエストを投げると、結果が確認できます。
http://127.0.0.1:5000/hoge?param=helloAPI(GET)
Response
http://127.0.0.1:5000/hoge(POST)
Body
Response