2014-08-31 140 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的可变部分(用户名称)。