Python REST API数值类型路由参数问题

时间:2019-05-15 21:13:37

标签: python flask swagger flask-restplus

我正在用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)

1 个答案:

答案 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