【Flask】簡単なAPIを実装
はじめに
Flaskを使って簡単なAPIを実装したいと思います。
フォーム、JSON、クエリストリングから値の取得方法についても紹介していきます。
Flaskとは
Flaskとは、Python製の軽量なWebアプリケーションフレームワークです。
簡単な使い方については、以下の記事で解説しています。
いまさらFlask超入門
はじめに Flaskについて、これから使い始める人向けに超簡単なアプリを作成して、実行してみるま
簡単なAPIの実装
リクエストメソッドはmethods
で指定します。デフォルトはGETとなっています。
route
で指定したURLとメソッドでAPIが実行できます。
レスポンスは辞書型で指定するとjsonで返します。
1from flask import Flask
2
3app = Flask(__name__)
4
5# URLとメソッドの指定
6@app.route("/articles", methods=["GET"])
7def get_articles():
8 title = "Qiita Title"
9 url = "https://qiita.com/"
10
11 # JSON形式でレスポンス
12 return {
13 "title": title,
14 "url": url,
15 }
辞書型でなくともjsonify
を使うとJSON形式にしてくれます。
1from flask import Flask, jsonify
2
3app = Flask(__name__)
4
5@app.route("/articles", methods=["GET"])
6def get_articles():
7 return jsonify(
8 title = "Qiita Title"
9 url = "https://qiita.com/"
10 )
実行してからPostmanでAPIを叩いてみます。
JSON形式でレスポンスが返ってきました。
リクエストデータの取得
クライアントから送られてきた情報はrequest
というグローバルなオブジェクトに格納されています。このrequest
を利用してクライアントから送られてきた情報を取得します。
ここでは下記3つの方法で送られてくるパラメータについて取得する方法を紹介します。
- フォーム
- ボディ(JSON形式)
- クエリストリング
余談ですが、各メソッドでパラメータをどこに入れるべきかは下記の記事が参考になりました。
そのリクエストパラメータ、クエリストリングに入れますか、それともボディに入れますか - Qiita
今回は、何らかのパラメータを扱うAPIを設計する際に、どこにパラメータを含めるべきかという問題について。選択肢は3つあります。1. クエリストリングに含める2. リクエストボディに含める3.…
フォームから値の取得
PUTやPOSTなどで送信されるフォームデータはrequest.form
でアクセスできます。
サンプルのコードはPOST的な動作はしていません。
1from flask import Flask, request
2
3app = Flask(__name__)
4
5@app.route("/articles_form", methods=["POST"])
6def get_articles_with_form():
7 title = request.form["title"]
8 url = request.form["url"]
9 return {
10 "title": title,
11 "url": url,
12 }
JSONから値の取得
JSON形式でパラメータが送られてきた場合はrequest.get_json
を利用します。
request.json
でもJSON形式にパースしてくれますが、Content-Typeがapplication/json
である必要があります。
1from flask import Flask, request
2
3app = Flask(__name__)
4
5@app.route("/articles_json", methods=["POST"])
6def get_articles_with_json():
7 data = request.get_json()
8 title = data["title"]
9 url = data["url"]
10 return {
11 "title": title,
12 "url": url,
13 }
クエリストリングから値の取得
クエリストリングから値を取得するにはrequest.args
を利用します。
1from flask import Flask, request
2
3app = Flask(__name__)
4
5@app.route("/articles_args", methods=["GET"])
6def get_articles_with_args():
7 title = request.args.get("title")
8 url = request.args.get("url")
9 return {
10 "title": title,
11 "url": url,
12 }
参考
- Quickstart — Flask Documentation (2.0.x)
- Flask REST API Tutorial - Python Tutorial
- python - Get the data received in a Flask request - Stack Overflow
- そのリクエストパラメータ、クエリストリングに入れますか、それともボディに入れますか - Qiita
- rest - HTTP GET with request body - Stack Overflow