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

2024-10-03 23:25:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在启动一个新的Python项目来帮助我学习Python语言。我是一名C#开发人员,对restapi非常熟悉,但我觉得Python中缺少了一些东西。我是用Flask RESTPlus写这篇文章的,并且一直遵循一些例子来让它工作。就目前的情况而言,我确实有一个可以工作的API,但我正在努力找出最后一个问题。你知道吗

我需要能够创建一个接受数字路由参数的API端点,而不管它是否是浮点的int。你知道吗

如果我添加多个路由,我可以让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)


Tags: api路由input参数areadescriptionfloat端点
1条回答
网友
1楼 · 发布于 2024-10-03 23:25:21

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

相关问题 更多 >