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

Python REST API Numeric Type Route Parameter Issues

我正在 Python 开始一个新项目来帮助我学习这门语言。我是一名 C# 开发人员,对 REST API 非常熟悉,但我觉得我在 Python 中遗漏了一些东西。我正在使用 Flask-RESTPlus 编写此代码,并一直在遵循示例以使其正常工作。按照目前的情况,我确实有一个工作 API,但我正在努力弄清楚这最后一块。

我需要能够创建一个 API 接受数字路由参数的端点,无论它是浮点数还是整数。

如果我添加多条路由,我的 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)

这returns一个正确的计算

curl -X GET "http://127.0.0.1:5000/api/v1/Area/Acre/1.2/ToSquareFoot" -H "accept: application/json"

这个returns一个404因为路由参数不是浮点数

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)

你可以在路径中使用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