GETリクエストをFlask=REST API。で処理します。リクエストには複数のパラメーターが含まれます。これは典型的なGETリクエストであることが期待できます。 https:// localhost:5000/item/analysis = true&class = A&class = B
したがって、GET要求は次のもので構成されます。
次のようにadd_resource()内でこれを受け入れたいです。
add_resource(Item, '/item/<whatever-comes-here>')
Add_resource()内で複数のパラメーター(そのうちの1つはリスト)を受け入れる方法についてはわかりません。 add_resource()関数でそれらを受け入れ、get()関数内でそれらをアンパックするにはどうすればよいですか?
これをリバースエンジニアリングに費やしましたが、まだ成功していません。私は何か間違っていますか?
(REST API GETリクエストでリストを送信するより良い方法があるかもしれないことを理解しているので、それに関するポインタを感謝します!)よろしくお願いします!
URLパラメータは?
の後に定義されるため、URLは次のようになります。
https:// localhost:5000/item?analysis = true&class = A&class = B
このようなURLパラメーターには、add_resource
で何も指定する必要はありません。
API GETメソッドでFlask
のrequest
プロキシオブジェクトからパラメーターを取得できます。
from flask import Flask, request
from flask_restful import Api, Resource
app = Flask(__name__)
api = Api(app)
# Flask mishandles boolean as string
TRUTHY = ['true', 'True', 'yes']
class Item(Resource):
def get():
# Get `class` list from request args
classes = request.args.getlist('class')
# Get `analysis` boolean from request args
analysis = True if request.args.get('analysis') in TRUTHY else False
api.add_resource(Item, '/item')
受信できるパラメーターの柔軟性を高めるには、Flask Restful独自の here のようなリクエストパーサーを使用してリクエストを解析します。
コードは次のようになります。
from flask import Flask
from flask_restful import Api, Resource, reqparse
app = Flask(__name__)
api = Api(app)
# Define parser and request args
parser = reqparse.RequestParser()
parser.add_argument('class', type=list)
parser.add_argument('analysis', type=bool, default=False, required=False, help='Enable analysis')
class Item(Resource):
def get():
args = parser.parse_args()
classes = args['class'] # List ['A', 'B']
analysis = args['analysis'] # Boolean True
api.add_resource(Item, '/item')
最後に、リストのよりコンパクトな形式が望ましい場合があります(たとえば、URLサイズの制限)。その場合、コンマ区切りリストをよく使用します。 https:// localhost:5000/item?analysis = true&class = A、B
リクエストパーサーでは、文字列のように受け入れて、 '、'で分割します。
parser.add_argument('class', type=str)
...
classes = args['class'].split(',')
乾杯!
クエリ文字列はその方法で使用できません。
上書きされるため、次のような文字列を使用します。
class=A,B