在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
之类的路线 - &gt; CuteKitty.habits(kitty_id)
答案 0 :(得分:6)
Flask-RESTful旨在通过解释HTTP Request方法专门实现RESTful API。饮料和喵显然不是HTTP方法(至少它们不在规范中 - 我会留下它),Flask-RESTful并不关注{{1}资源中的{}和drink
方法。
明显的答案是定义多个API路径:
meow
不太明显的方法是创建一个frankenresource:
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>/')
打破args并用它们调用任务。或者,您可以将它们设置为URL参数(split('/')
) - 这仍然是一个有效的RESTful架构。
您也可以继承Resource类并自己实现所需的功能 - 在这种情况下,我建议您查看Flask-Classy如何实现此功能。或者你可以拿起Flask-Classy并用它玩具,看看你也喜欢它;但是,对于一个直接的API,我认为RESTful比Classy带来更多的东西。
答案 1 :(得分:0)
第 1 步:编写 Resource 类。
class CuteKitty(Resource):
def get(self): return {}
def post(self): return {}
def put(self): return {}
def delete(self): return None, 204
def meow(self): return {}
第 2 步:在类下面,或者在获取可调用对象之后,
api.add_resource(CuteKitty,'/api/kitty/meow',endpoint='meow',methods=['GET'])