「いまどきのWeb開発(サーバーサイド編)」ってことで、Rest APIをやってみようと思います。
「Vue勉強してんだからLaravelやれよ」ってまさかりが飛んできそうですが、php使ったこと無いので、、、←
「初心者はRailsじゃね?」ってのも言われましたが、Ruby使ったこと無いので、、、←
ってことで、Python系のDjangoをやってみようかと思ってたんですが、知人にFlaskのほうが簡単と教えてもらったので、 Flaskについて勉強してみます。
参考にさせていただいたのはこちら。
Flaskとは
Flask(フラスコ)は、プログラミング言語Python用の、軽量なウェブアプリケーションフレームワークである。標準で提供する機能を最小限に保っているため、自身を「マイクロフレームワーク」と呼んでいる。
(出典:wikipedia)
早い話が、軽量化・シンプルなPython用ウェブアプリケーションフレームワークですね。
Vueもそうですが、日本語訳された親切なユーザーガイドがあるのはポイント高いですね。
基本的な使い方
早速使ってみます。
環境構築
インストールはこちら。
pip3 install flask
バージョンも上げときましょうか。
pip3 install --upgrade flask
こんなもんです。
Hello World
書いてあるとおりにHello Worldをやってみます。
こんなファイルを用意します。
from flask import Flask, jsonify app = Flask(__name__) @app.route('/hello') def hello_world(): return jsonify({'message': 'Hello, world'})
コードはこんだけ。 あとはサーバーを起動します。
FLASK_APP=hello.py flask run
そしたらサーバーが立ち上がります。
~ $curl localhost:5000/hello {"message":"Hello, world"}
...超簡単ですね。
ルーティング
今度はend pointで動作を切り替えます。
今回はエンドポイントを/foo/barにしています。 そこに対してGETメソッドの場合と、POSTメソッドの場合で挙動を切り替えます。
from flask import Flask app = Flask(__name__) @app.route('/foo') def get_foo(): return 'foo\n' @app.route('/bar') def get_bar(): return 'bar\n' @app.route('/foo/bar/<int:baz>', methods=['POST']) def post_foobar(baz): return 'you posted {}\n'.format(baz)
動かすとこんな感じ。
~ $curl localhost:5000/foo foo ~ $curl localhost:5000/bar bar ~ $curl -X POST localhost:5000/foo/bar/1 you posted 1 ~ $
...超簡単ですね。(2回目)
JSONの受け渡し
今度はJSONを受け取ってみます。
from flask import Flask, request, jsonify app = Flask(__name__) app.config['JSON_AS_ASCII'] = False # JSONでの日本語文字化け対策 @app.route('/', methods=['POST']) def post_json(): json = request.get_json() # POSTされたJSONを取得 return jsonify(json) # JSONをレスポンス @app.route('/', methods=['GET']) def get_json_from_dictionary(): dic = { 'foo': 'bar', 'ほげ': 'ふが' } return jsonify(dic) # JSONをレスポンス
こんな感じですね。
~ $curl -X POST -H 'Content-Type:application/json' -d '{"data":"fuga"}' localhost:5000/ {"data":"fuga"}
...超簡単ですね。(3回目)
感想
めちゃくちゃ簡単ですね。 普通にメソッド定義して、そのままエンドポイント指定すれば使えるんすね。 超簡単です。
引き続き勉強したいと思います。