flask-restfulAPI中的多个可选参数?
Multiple optional parameters in flask-restful API?
我有一个很简单的API。你给它一个名字、电子邮件、地址、年龄,然后它 returns:
{
'your name is':name,
'your email is': email,
'your address is': address,
'your age is': age
}
但是我试图让这些参数可选。
所以我可以用 http://127.0.0.1:5000/overflow_test/name=John
调用 API,即仅名称。或者我可以只用姓名和电子邮件打电话 http://127.0.0.1:5000/overflow_test/name=John&email='email@gmail.com
我认为我的问题出在下面的 api.add_resource
部分:
from flask import Flask
from flask_restful import Resource, Api
import requests
app = Flask(__name__)
api = Api(app)
class hlr_lookup(Resource):
def get(self,name,email,address,age):
return {
'your name is':name,
'your email is': email,
'your address is': address,
'your age is': age
}
api.add_resource(hlr_lookup,'/overflow_test/<string:name><string:email><string:address><string:age>')
if __name__ == '__main__':
app.run(debug=True)
我已经尝试了 add_resource
行的许多不同变体。
我在这里检查了相关问题,但答案都是这样构造请求的:'/overflow_test/parameter1/parameter2/parameter3/paramter4'
即所有参数都用斜杠分隔 /
.
是否可以用“&”分隔? &
?是API我比较习惯的风格
http://127.0.0.1:5000/overflow_test/name=John&email='email@gmail.com
如果我只使用名称 John
的当前输出:
# api call
http://127.0.0.1:5000/overflow_test/name=John
# result
{
"your name is": "name=J",
"your email is": "o",
"your address is": "h",
"your age is": "n"
}
使用 flask-resful 解决reqparse.
更多信息在这里:https://blog.miguelgrinberg.com/post/designing-a-restful-api-using-flask-restful
from flask import Flask
from flask_restful import Resource, Api
from flask_restful import reqparse
app = Flask(__name__)
api = Api(app)
class print_stuff(Resource):
def __init__(self):
self.reqparse = reqparse.RequestParser()
self.reqparse.add_argument('name', type = str, default='')
self.reqparse.add_argument('email', type = str, default='')
self.reqparse.add_argument('address', type = str, default='')
self.reqparse.add_argument('age', type = str, default='')
super(hlr_lookup, self).__init__()
def get(self):
args = self.reqparse.parse_args()
return {
'your name is':args['name'],
'your email is': args['email'],
'your address is': args['address'],
'your age is': args['age']
}
api.add_resource(print_stuff,'/overflow_test')
if __name__ == '__main__':
app.run(debug=True)
现在我可以这样调用 api:
127.0.0.1:5000/print_stuff?name=John&age=23&address=main street new york&email=something@gmail.com
我有一个很简单的API。你给它一个名字、电子邮件、地址、年龄,然后它 returns:
{
'your name is':name,
'your email is': email,
'your address is': address,
'your age is': age
}
但是我试图让这些参数可选。
所以我可以用 http://127.0.0.1:5000/overflow_test/name=John
调用 API,即仅名称。或者我可以只用姓名和电子邮件打电话 http://127.0.0.1:5000/overflow_test/name=John&email='email@gmail.com
我认为我的问题出在下面的 api.add_resource
部分:
from flask import Flask
from flask_restful import Resource, Api
import requests
app = Flask(__name__)
api = Api(app)
class hlr_lookup(Resource):
def get(self,name,email,address,age):
return {
'your name is':name,
'your email is': email,
'your address is': address,
'your age is': age
}
api.add_resource(hlr_lookup,'/overflow_test/<string:name><string:email><string:address><string:age>')
if __name__ == '__main__':
app.run(debug=True)
我已经尝试了 add_resource
行的许多不同变体。
我在这里检查了相关问题,但答案都是这样构造请求的:'/overflow_test/parameter1/parameter2/parameter3/paramter4'
即所有参数都用斜杠分隔 /
.
是否可以用“&”分隔? &
?是API我比较习惯的风格
http://127.0.0.1:5000/overflow_test/name=John&email='email@gmail.com
如果我只使用名称 John
的当前输出:
# api call
http://127.0.0.1:5000/overflow_test/name=John
# result
{
"your name is": "name=J",
"your email is": "o",
"your address is": "h",
"your age is": "n"
}
使用 flask-resful 解决reqparse.
更多信息在这里:https://blog.miguelgrinberg.com/post/designing-a-restful-api-using-flask-restful
from flask import Flask
from flask_restful import Resource, Api
from flask_restful import reqparse
app = Flask(__name__)
api = Api(app)
class print_stuff(Resource):
def __init__(self):
self.reqparse = reqparse.RequestParser()
self.reqparse.add_argument('name', type = str, default='')
self.reqparse.add_argument('email', type = str, default='')
self.reqparse.add_argument('address', type = str, default='')
self.reqparse.add_argument('age', type = str, default='')
super(hlr_lookup, self).__init__()
def get(self):
args = self.reqparse.parse_args()
return {
'your name is':args['name'],
'your email is': args['email'],
'your address is': args['address'],
'your age is': args['age']
}
api.add_resource(print_stuff,'/overflow_test')
if __name__ == '__main__':
app.run(debug=True)
现在我可以这样调用 api:
127.0.0.1:5000/print_stuff?name=John&age=23&address=main street new york&email=something@gmail.com