10

Flask-RESTful を使用するように REST API サーバーをリファクタリングしていますが、別のリソースに属するリソースのリストを取得する必要がある特定のケースについて疑問があります。このようなもの:

/api/v1/users/john/orders

これをどのように設計しますか?Orders というリソースがある場合、どのユーザーから注文を取得する必要があるかを知る必要があるためです。しかし、どうすればリソースにユーザーについて知らせることができますか? リソースにパラメーターを指定できる __ init __ メソッドがありません。

Orders リソースを登録するときに、次のようなことを考えました。

api.add_resources(Orders, '/api/v1/users/<string:username>/orders')

しかし、どうすれば Orders リソースのstring:usernameにアクセスできますか??

1つの解決策は次のことだと思います:

api.add_resources(Orders, '/api/v1/orders/') 

注文を取得したいユーザーを指定するクエリパラメーターを送信しますが、上記の例のようなことができるかどうかを知りたかったのです。

4

1 に答える 1

10

やれやれ、やっと手に入れた。これが解決策です

名前で検索できるユーザーのエンドポイントがあり、ユーザーにはクエリもできる注文があるとします。注文クエリは一般的なものであり、対応するクエリパラメーターのみが必要であり、注文を探す必要があるユーザーを知る必要があります。

from flask import Flask
from flask_restful import Api


app = Flask(__name__)
app.config['DEBUG'] = True

from views import *

api = Api(app)
api.add_resource(OrdersQuery, '/api/v1/user/<string:name>/orders/query/')

また、リソース クラスを定義する場合:

class OrdersQuery(Resource):
    def get(self, name):
        ## do something with name, like retrieving the user
        ## probably grab the orders and apply the query with the params from the url
        return jsonify({
            'result_list': [..something in here..]
        })

ご覧のとおり、url の可変部分 (ユーザーの名前) をクエリ order エンドポイントに使用しています。

于 2014-11-18T16:06:12.313 に答える