gpt4 book ai didi

python - 除了 GET、PUT、POST、DELETE 之外的 Flask-RESTful 自定义路由

转载 作者:太空狗 更新时间:2023-10-29 18:30:34 24 4
gpt4 key购买 nike

在 Flask-RESTful 中,我们添加如下所示的 api 路由

api.add_resource(CuteKitty,'/api/kitty')

class CuteKitty(Resource):
def get(self): return {}
def post(self): return {}
def put(self): return {}
def delete(self): return None, 204

所以GET /api/kitty --> 至 CuteKitty.get()方法;对于所有 HTTP 动词都是这样

假设我需要为我的 api 消费者提供一个像

这样可爱的 api
POST /api/kitty/drink/milk  ---> CuteKitty.drink(what="milk")
POST /api/kitty/meow ---> CuteKitty.meow()

如何使用 api.add_resource 实现上述路由?

class CuteKitty(Resource):
def get(self): return {}
def post(self): return {}
def put(self): return {}
def delete(self): return None, 204
def drink(self,what="milk"): return {}
def meow(self): return {}

同样明智的是如何添加像/api/kitty/<int:kitty_id>/habits这样的路线--> CuteKitty.habits(kitty_id)

最佳答案

Flask-RESTful 旨在通过解释 HTTP 请求方法专门实现 RESTful API。 Drink 和 Meow 不是标准的 HTTP 方法,因此 Flask-RESTful 不关心资源中的 drinkmeow 方法。

解决方案是定义多个 API 路由:

api.add_resource(CuteKitty, '/kitty/<int:kitty_id>/')
api.add_resource(DrinkingKitty, '/kitty/<int:kitty_id>/drink/<what>')
api.add_resource(MeowingKitty, '/kitty/<int:kitty_id>/meow/')

不太直观(在我看来更糟糕)的方法是创建科学怪人资源:

# still allow requests to hit just get/post/etc without invoking anything else
api.add_resource(CuteKitty, '/kitty/<int:kitty_id>/')
api.add_resource(CuteKitty, '/kitty/<int:kitty_id>/<task>/<path:args>/')

然后用 split('/') 分解参数并用它们调用任务。或者,您可以将它们设置为 URL 参数 (/endpoint/?task=drink&what=milk)——这仍然是一个有效的 RESTful 架构。

您还可以子类化 Resource 类并自己实现所需的功能——在这种情况下,我建议您查看 Flask-Classy 是如何实现它的。或者你可以拿起 Flask-Classy 玩玩它,看看你是否也喜欢它;然而,对于直接的 API,我认为 RESTful 比 Classy 带来更多的好处。

关于python - 除了 GET、PUT、POST、DELETE 之外的 Flask-RESTful 自定义路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25757792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com