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が短くなってます。
これはアクセス数が多いサービスなどでは帯域の節約のためにも覚えていたほうがいいかもしれません。