我正在用Python启动一个新项目,以帮助我学习该语言。我是C#开发人员,对REST API非常满意,但是我觉得我在Python中缺少一些东西。我正在用Flask-RESTPlus编写此代码,并且一直在遵循以下示例来使其工作。就目前情况而言,我确实有一个有效的API,但是我试图弄清楚这最后一部分。
我需要能够创建一个接受数字路由参数的API端点,而不管它是否是float的整数。
如果添加多个路由,我的API可以正常工作,但是必须有更好的方法。
我的一个端点
ns_area = Namespace('Area', description='Area calculations')
@ns_area.route('/Acre/<float:input>/ToSquareFoot')
class ConversionsArea(Resource):
def get(self, input):
input = float(input)
return area.acre_to_ft2(input)
这将返回正确的计算结果
curl -X GET "http://127.0.0.1:5000/api/v1/Area/Acre/1.2/ToSquareFoot" -H "accept: application/json"
这会返回404,因为route参数不是浮点数
curl -X GET "http://127.0.0.1:5000/api/v1/Area/Acre/1/ToSquareFoot" -H "accept: application/json"
此外,如果我没有类型标识符,则默认为字符串。
我真的希望不必重复这样的路线。
ns_area = Namespace('Area', description='Area calculations')
@ns_area.route('/Acre/<float:input>/ToSquareFoot')
@ns_area.route('/Acre/<int:input>/ToSquareFoot')
class ConversionsArea(Resource):
def get(self, input):
input = float(input)
return area.acre_to_ft2(input)
答案 0 :(得分:1)
您可以在路径中使用string
并评估是否可以将其转换为float
。如果没有,请举起ValueError
并打印正确的消息。
ns_area = Namespace('Area', description='Area calculations')
@ns_area.route('/Acre/<string:input>/ToSquareFoot')
class ConversionsArea(Resource):
def get(self, input):
try:
input = float(input)
return area.acre_to_ft2(input), 200
except ValueError:
return "Can't convert {} to number".format(input), 400