uokadaの見逃し三振は嫌いです

ここで述べられていることは私の個人的な意見に基づくものであり、私が所属する組織には一切の関係はありません。

続・flaskでjsonを返すサンプルコード

1つ前のエントリから改めて普通にjsonを返すコードを書くにはどうするのか試しに書いてみた。

結論から言うとこっちのほうがコードが短くなって直感敵でわかりやすい。

#!/usr/bin/env  python2.7
from flask import Flask, Response, json
app = Flask(__name__)


@app.route('/name/<name>.json')
def hello_world(name):
    greet = "Hello %s from flask!" % name
    result = {
        "ResultSet": {
            "Result": {
                "Greeting": greet
            }
        }
    }

    response = Response(json.dumps(result))
    response.headers['Content-Type'] = "application/json"
    response.headers['Last-Modified'] = \
        "Last-Modified: Wed, 21 Jun 2012 07:00:25 GMT"
    return response

if __name__ == '__main__':
    app.run(debug=True)

これでレスポンスを比較してみる。

% curl -i http://localhost:5000/name/uokada.json
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 68
Last-Modified: Last-Modified: Wed, 21 Jun 2012 07:00:25 GMT
Server: Werkzeug/0.8.3 Python/2.7.1
Date: Fri, 09 Nov 2012 15:55:44 GMT

{"ResultSet": {"Result": {"Greeting": "Hello uokada from flask!"}}}    

ほとんど一緒のレスポンスを返していますがjsonのインデントが無くなった分だけContent-Lengthが短くなってます。

これはアクセス数が多いサービスなどでは帯域の節約のためにも覚えていたほうがいいかもしれません。