読者です 読者をやめる 読者になる 読者になる

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

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

Flask製のREST APIのためにFlask-debug-toolbarのソースを読んだ。

mgood/flask-debugtoolbar · GitHub

Flask-debugtoolbarで開発を楽に! - uokadaの日記

Flask-debug-toolbarはFlaskで開発するときの拡張モジュールの話なんだけど、
REST APIでもプロファイリングした結果欲しいな〜って思って
どうやったらツールバーが出るのか仕組みを調べてみた。

結論からいくと flask_debugtoolbar/init.py の replace_insensitive関数で ツールバーの部分を差し込んでるだけでした。
関数の中でbodyの閉じタグを探してそこにレスポンスを追加しているようです。

理屈がわかったのでWebAPIのレスポンスでも簡単にプロファイリングとることが出来そうです。

例えば、JSONを返すWebAPIにWebブラウザからリクエストした時だけプロファイリング結果を出力したい場合はこんな感じです。
after_requestのところでContent-TypeとUserエージェントを見てbodyタグで囲ってやれば プロファイリング結果が出力されるようになります。

@app.after_request
def add_dtb(response):
    if response.content_type == "application/json":
        if request.headers.get('User-Agent').find("Mozilla") == 0:
            body = "<body>%s</body>" % response.data
            return Response(body)
    return response

既存のコードにそこまで変更を加えずにプロファイリング出来ることがわかったので これで開発が捗るわ〜!