【Flask】簡単なAPIを実装

はじめに

Flaskを使って簡単なAPIを実装したいと思います。

フォーム、JSON、クエリストリングから値の取得方法についても紹介していきます。

Flaskとは

Flaskとは、Python製の軽量なWebアプリケーションフレームワークです。

簡単な使い方については、以下の記事で解説しています。

いまさらFlask超入門
はじめにFlaskについて、これから使い始める人向けに超簡単なアプリを作成して、実行してみるまでを紹介したいと思います。利用するバージョンは以下の通りです。>>> flask.__version__'2.0.1...

簡単な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,
    }

参考

タイトルとURLをコピーしました