はじめに
Flaskを使って簡単なAPIを実装したいと思います。
フォーム、JSON、クエリストリングから値の取得方法についても紹介していきます。
Flaskとは
Flaskとは、Python製の軽量なWebアプリケーションフレームワークです。
簡単な使い方については、以下の記事で解説しています。

いまさらFlask超入門
はじめにFlaskについて、これから使い始める人向けに超簡単なアプリを作成して、実行してみるまでを紹介したいと思います。利用するバージョンは以下の通りです。>>>flask.__version__'2.0.1'Flask...
簡単なAPIの実装
リクエストメソッドはmethods
で指定します。デフォルトはGETとなっています。
route
で指定したURLとメソッドでAPIが実行できます。
レスポンスは辞書型で指定するとjsonで返します。
from flask import Flask
app = Flask(__name__)
# URLとメソッドの指定
@app.route("/articles", methods=["GET"])
def get_articles():
title = "Qiita Title"
url = "https://qiita.com/"
# JSON形式でレスポンス
return {
"title": title,
"url": url,
}
辞書型でなくともjsonify
を使うとJSON形式にしてくれます。
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/articles", methods=["GET"])
def get_articles():
return jsonify(
title = "Qiita Title"
url = "https://qiita.com/"
)
実行してからPostmanでAPIを叩いてみます。
JSON形式でレスポンスが返ってきました。
リクエストデータの取得
クライアントから送られてきた情報はrequest
というグローバルなオブジェクトに格納されています。このrequest
を利用してクライアントから送られてきた情報を取得します。
ここでは下記3つの方法で送られてくるパラメータについて取得する方法を紹介します。
- フォーム
- ボディ(JSON形式)
- クエリストリング
余談ですが、各メソッドでパラメータをどこに入れるべきかは下記の記事が参考になりました。

そのリクエストパラメータ、クエリストリングに入れますか、それともボディに入れますか - Qiita
今回は、何らかのパラメータを扱うAPIを設計する際に、どこにパラメータを含めるべきかという問題について。選択肢は3つあります。1.クエリストリングに含める2.リクエストボディに含める3.…
フォームから値の取得
PUTやPOSTなどで送信されるフォームデータはrequest.form
でアクセスできます。
サンプルのコードはPOST的な動作はしていません。
from flask import Flask, request
app = Flask(__name__)
@app.route("/articles_form", methods=["POST"])
def get_articles_with_form():
title = request.form["title"]
url = request.form["url"]
return {
"title": title,
"url": url,
}
JSONから値の取得
JSON形式でパラメータが送られてきた場合はrequest.get_json
を利用します。
request.json
でもJSON形式にパースしてくれますが、Content-Typeがapplication/json
である必要があります。
from flask import Flask, request
app = Flask(__name__)
@app.route("/articles_json", methods=["POST"])
def get_articles_with_json():
data = request.get_json()
title = data["title"]
url = data["url"]
return {
"title": title,
"url": url,
}
クエリストリングから値の取得
クエリストリングから値を取得するにはrequest.args
を利用します。
from flask import Flask, request
app = Flask(__name__)
@app.route("/articles_args", methods=["GET"])
def get_articles_with_args():
title = request.args.get("title")
url = request.args.get("url")
return {
"title": title,
"url": url,
}