2014-08-31 110 views
4

我重構我的休息api服務器使用Flask-RESTful,並且對某些特定情況我需要獲得屬於另一個資源的列表的疑問。有些事情是這樣的:flask-restul嵌套的資源

/api/v1/users/john/orders 

你會如何設計它?因爲如果我有一個名爲訂單的資源,我需要知道從哪個用戶我必須從中獲取訂單。但是,我如何讓資源知道用戶?我沒有看到任何__ init __方法,我可以指定參數給資源。

我想到了註冊訂單資源時做這樣的事情:

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

但是,我怎麼能訪問字符串:用戶名在訂單資源

我想一個解決辦法是要做到:

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

,併發送查詢參數指定我想從訂單的用戶,但我想知道,如果它可以做到像上面的例子。

+0

你有沒有想過如何做到這一點? – 2014-11-18 12:50:35

+0

對不起忘記了這個。是!虐待編輯問題,以便您可以看到它。 – Sebastian 2014-11-18 15:58:19

回答

5

嗯,我終於明白了。以下是解決方案

假設我們有一個可以按名稱查看的用戶端點,並且用戶也有可以查詢的訂單。訂單查詢將是一個普通的事情,那就只需要在相應的查詢參數,並將需要知道哪些用戶將不得不尋找訂單:

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的可變部分(用戶名稱)。