在Python Flask应用程序中使用app.route()和api.add_resource()配置端点有什么区别?

在Python Flask应用程序中使用app.route()和api.add_resource()配置端点有什么区别?,python,flask,flask-restful,Python,Flask,Flask Restful,我正在学习Python Flask,并发现有两种方法可以在应用程序中创建端点 1. app.routing(/endpoint) 2. api.add_resource(CLASSNAME, endpoint) 使用app.routing()。使用api.add_resource()我们需要注册类名和端点 我已经看到,如果您使用的是api.add\u resource() 例如: 并提交了API调用的http://127.0.0.1:5000/getallvehicles`对于GET请求,我面

我正在学习Python Flask,并发现有两种方法可以在应用程序中创建端点

1. app.routing(/endpoint)
2. api.add_resource(CLASSNAME, endpoint)
使用
app.routing()。使用
api.add_resource()
我们需要注册类名和端点

我已经看到,如果您使用的是
api.add\u resource()
例如:

并提交了API调用的http://127.0.0.1:5000/getallvehicles`对于GET请求,我面临一个错误:

 File "/Users/bobby/PyCharmProjects/FlaskAPI/venv/lib/python3.7/site-packages/flask_restful/__init__.py", line 583, in dispatch_request
    resp = meth(*args, **kwargs)
TypeError: get() missing 1 required positional argument: 'name'
有谁能告诉我我在这里犯了什么错误,以及我如何在下一行中为
getallvehicles()
指定一个端点,并将其映射到
GET
http请求:

api.add_resource(VehicleData, '/addvehicle/<string:name>', '/getvehicle/<string:name>', '/getallvehicles')
api.add_资源(VehicleData,/addvehicle/,“/getvehicle/”,“/getallvehicles”)

这两种不同方式的区别在于:

这是一个“本机”flask方法,您可以使用它来包装函数

@app.routing('/endpoint')
这是restfull_flask包的一部分,它以不同于本地flask的方式进行操作

api.add_resource(CLASSNAME, endpoint)
您可以用这两种方法做同样的事情,但是如果您使用rest\u框架,那么您应该使用第二种方法:)

对于您的其余问题,我相信您会在本文档中找到答案:

但我无法在rest框架中实现相同的功能,我已经解释过了。你能告诉我在
api.add\u资源(VehicleData,“/addvehicle/”,“/getvehicle/”,“/getallvehicles”)行中添加方法
getallvehicles
的语法吗。这就是我面临错误的地方。检查我添加到答案中的链接:)我想这篇文章回答了你的问题。在flask_restful中,方法名固定到http方法(get、post、put、patch和delete),因此它们可以根据请求方法自动映射。我想您在这里要做的是定义一个名为
VehicleList
的新类,它的
get()
返回所有车辆。我已经尝试过了,它可以正常工作。但是有没有其他方法可以避免使用新类呢?简短的回答是“没有”。flask_restful框架是围绕REST约定构建的。你想做的事和其余的不一致。
@app.routing('/endpoint')
api.add_resource(CLASSNAME, endpoint)