如何在REST API中处理查询[python]

时间:2016-11-24 14:39:19

标签: python rest falconframework

我学习了如何使用falcon lib在python中实现REST API。 例如,我有以下词典:

db_data = {
    "servers" : {
        "1": {
            # 'server_id':1,
            "plugins":{
                "1": {
                    "metrics_by_time":{
                        "2014":{"1":"Hello World 0"}
                        "2015":{"1":"Hello World 1"}
                        "2016":{"1":"Hello World 2"}
                    }

                }

            }
        }

    }
}

我想创建一个API,它将返回一段时间(例如2014年到2016年之间)返回指标。我怎么能这样做? 例如,我现在有以下代码通过server_id和plugin_id返回指标:

class By_Plugin_ID(object):
      def on_get(self, req, resp, server_id, plugin_id):
           resp.status = falcon.HTTP_200
           resp.body = (json.dumps(db_data["servers"][str(server_id)]["plugins"][str(plugin_id)], ensure_ascii=False, default=lambda x:str(x)))
import falcon
app = application = falcon.API()
plugins_metrics = By_Plugin_ID()
app.add_route('/metrics/{server_id}/{plugin_id}', plugins_metrics)

我想过这样的事情,但是如何在"?"之后处理查询。 :

metrics/{server_id}/{plugin_id}?from_time={timestamp}&to_time={timestamp}

2 个答案:

答案 0 :(得分:1)

?后出现查询参数。 Falcon允许您使用Request.params访问它们。

答案 1 :(得分:1)

我对Falcon不熟悉,我通常与Flask合作,但是看看他们的文档,你应该用req.get_param()

来获取它们。
from_time = req.get_param('from_time')
to_time = req.get_param('to_time')

你应该把它放在on_get()函数

def on_get(self, req, resp, server_id, plugin_id):
    from_time = req.get_param('from_time')
    to_time = req.get_param('to_time')
    # do whatever you want and return your response