【问题标题】:flask-restul nested resources烧瓶休息的嵌套资源
【发布时间】:2014-10-25 02:15:35
【问题描述】:

我正在重构我的 rest api 服务器以使用 Flask-RESTful,并且我对一些需要获取属于另一个资源的列表的特殊情况有一些疑问。像这样的东西:

/api/v1/users/john/orders

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

我在注册 Orders 资源时想过做这样的事情:

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

但是我怎样才能访问 Orders 资源中的 string:username 呢??

我想一种解决方案是:

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

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

【问题讨论】:

  • 你知道怎么做吗?
  • 抱歉忘记了这个。是的!生病编辑问题,以便您可以看到它。

标签: python rest flask-restful


【解决方案1】:

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

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

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 的可变部分(用户名)用于查询订单端点。

【讨论】:

  • 如何使用 flask_restful 执行 /api/v1/user//orders//query/ 之类的操作?如果你能指出我正确的方向,将不胜感激......
  • 你也会这样做,只是你将在 url 字符串和 get 方法中有 2 个参数。但是,如果您已经发送了订单 ID,那么您为什么还要发送查询呢?无论如何,如果这是你需要的,你可以像上面一样添加新参数。
猜你喜欢
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多