flask-restul嵌套资源

Seb*_*ian 6 python rest flask-restful

我重构我的休息api服务器使用Flask-RESTful,我对某些特殊情况有一些疑问,我需要获取属于另一个的资源列表.有点像这样:

/api/v1/users/john/orders
Run Code Online (Sandbox Code Playgroud)

你会怎么设计这个?因为如果我有一个名为Orders的资源,我需要知道从哪个用户获得订单.但是我怎样才能让资源了解用户呢?我没有看到任何__ init __方法,我可以在其中指定资源的参数.

在注册Orders资源时,我考虑过这样做:

api.add_resources(Orders, '/api/v1/users/<string:username>/orders')
Run Code Online (Sandbox Code Playgroud)

但是如何在Orders资源中访问字符串:username

我想一个解决方案就是:

api.add_resources(Orders, '/api/v1/orders/') 
Run Code Online (Sandbox Code Playgroud)

并发送指定我想从中获取订单的用户的查询参数,但我想知道是否可以执行类似上面示例的操作.

Seb*_*ian 6

好吧,我终于明白了.这是解决方案

让我们假设我们有一个可以按名称查看的用户端点,并且用户也可以查询订单.订单查询将是一个通用的东西,它只需要相应的查询参数,并需要知道它将要查找订单的用户:

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/')
Run Code Online (Sandbox Code Playgroud)

在定义资源类时:

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..]
        })
Run Code Online (Sandbox Code Playgroud)

如您所见,您正在使用URL的可变部分(用户名)作为查询订单端点.