5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Python】Flask で自作WEB APIにクエリパラメータを渡す

Last updated at Posted at 2020-12-06

目的

自分で WEB API を提供するサーバを立てたい。そのときに、

http://myserver:5000/sometask&key1=str1&key2=12.34

のように渡す、普通の形で提供したい。

情報源

実装(その1:Flask-RESTfulを使用)

以下で動かしました。flask-restful は pip でインストールしました。

myapi.py
from flask import Flask
from flask_restful import Resource, Api, reqparse

app = Flask(__name__)
api = Api(app)

class TaskAPI(Resource):
    def get(self):

        parser = reqparse.RequestParser()
        parser.add_argument('key1', type=str)
        parser.add_argument('key2', type=float)

        query_data = parser.parse_args()
        print("input_data={}".format(query_data))
        return query_data
api.add_resource(TaskAPI, '/bar', endpoint='bar')

if __name__ == '__main__':
    app.run(debug=True)

Flask-RESTful では、Resource を継承したクラスにgetやpost を実装します。
Flask では返り値をjsonify(data) としましたが、ここでは必要ありません。
実装したクラスをapi に route と共に登録します。
(と、コードを見て理解しています。^^;)

動作確認

まず、上記のコードを動かします。

$ python3 myapi.py

(1) curl で。&の前にバックスラッシュを入れよう。

$  curl http://localhost:5000/bar?key1=val1\&key2=12.34
{
    "key1": "val1",
    "key2": "12.34"
}

(2) ipython で

In [1]: from requests import put, get
In [2]: get('http://localhost:5000/bar?key1=val1&key2=12.34').json()
Out[2]: {'key1': 'val1', 'key2': '12.34'}

(3) ブラウザに入れるとjson が返っているのが分かります。

api.add_resource(TaskAPI, '/bar', endpoint='bar')

実装(その2:Flaskを使用)

じ、実はFlask だけでも同じことができました。m(__)m


from flask import request, Flask, jsonify

app = Flask(__name__)

@app.route('/bar')
def data():
    return jsonify( request.args.to_dict())

if __name__ == '__main__':
    app.run(debug=True)

全てrequestに入れられているんですね。(という解釈^^;)

  • request.args には ImmutableMultiDict([('val1', 'key1'), ('val2', '12.34')])が入っています。
  • request.query_string とすると、b'val1=key1&val2=12.34'が返ってきます。

自分の場合、なんとなくFlaskだけで良いかも。

まとめ

とりあえず、目的は達成できた。REST API とはそもそも何か、HTTPとは何か、とか、エラー処理や型の確認とか、よりコードを頑健にするなど、残課題はありますが、まずはここまでとする。
 これで明日の仕事は乗り切れるかな。深夜、日付が変わってしまったが。今日はこの辺りで。
(2020/12/06)

追記:

  • Flask だけでもquery parameters を辞書として取得できることを知り、追記。(2020/12/07)
5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?