11

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)

4

2 に答える 2

20

Flask-RESTful は、特に HTTP Request メソッドを解釈することによって RESTful API を実装するように設計されています。Drink と Meow は標準の HTTP メソッドではないため、Flask-RESTful はリソース内の メソッドdrinkとメソッドには関係ありません。meow

これに対する解決策は、複数の 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/')

直感的ではない (そして、はるかに悪い) 方法は、frankenresource を作成することです。

# 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 を区切り、split('/')それらで task を呼び出します。あるいは、これらを URL 引数 ( ) として設定することもできます/endpoint/?task=drink&what=milk。これは依然として有効な RESTful アーキテクチャです。

Resource クラスをサブクラス化し、目的の機能を自分で実装することもできます。この場合、Flask-Classy がこれをどのように実装しているかを確認することをお勧めします。または、Flask-Classy を手に取って、それをいじって、それがどのように好きかを確認することもできます。ただし、ストレートな API の場合、RESTful は Classy よりも多くのものをもたらすと思います。

于 2014-09-11T03:35:28.220 に答える
1

ステップ 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: クラスの下、または callable を取得した後、

api.add_resource(CuteKitty,'/api/kitty/meow',endpoint='meow',methods=['GET'])
于 2021-03-26T05:53:00.520 に答える