监控API以进行更改 - Pythonic方式?

时间:2015-03-05 14:47:06

标签: python api rest

我希望在RESTful API更改其响应时收到警报。使用Python的最佳方法是什么?

我有一个我可以调用的API - 192.168.1.1/status.json - 它返回一个包含大量数据的JSON文件。例如:

{
  "status"      : "charging",
  "status_code" : 123
}

我想检测该状态代码何时变形。

我可以设置cron每分钟轮询API(这足以满足我的需求) - 但是将新结果与之前结果进行比较的最佳方法是什么?

我唯一能想到的是将.json文件保存到磁盘,然后读取并比较它。是否有更好/更正确的方法来跨会话持久保存数据?

另一种方法是将Python程序设置为循环运行,休眠60秒并将结果保存在内存中。但是我必须确保没有内存泄漏,在启动时保持运行,防止崩溃等等。

API服务器非常基础 - 所以建议" Proper way to periodically check an api for new data?"是不可能的。

我忽略了一些明显的事情吗?

2 个答案:

答案 0 :(得分:2)

Mybe你应该看看这个链接。 here

import json
#import tempfilehttp://stackoverflow.com/editing-help
# first install pandokia  ( pip install pandokia )
import pandokia.helpers.filecomp as filecomp

# string object
obj = """
{
  "status"      : "charging",
  "status_code" : 123
}
"""

objTwo = """
{
  "status"      : "chargingToo",
  "status_code" : 123
}
"""
# From a json back to a python string object
result = json.dumps(obj)
resultTwo = json.dumps(objTwo)

assert filecomp.diffjson( result, resultTwo )

请在导入pandokia模块后阅读doc。帮助(filecomp)

答案 1 :(得分:1)

jsondiff python软件包将完成您想要的事情。

从API中提取最新的json,然后使用jsondiff与最新的json进行比较。如果发生了更改,请以某种方式发出警报(发送电子邮件等),并将新的json保存在旧的json上。重复检查API的次数。

jsondiff易于使用,并将在API输出中为您提供更改,以供您在警报中使用。

>>> from jsondiff import diff

>>> diff({'a': 1, 'b': 2}, {'b': 3, 'c': 4})
{'c': 4, 'b': 3, delete: ['a']}

>>> diff(['a', 'b', 'c'], ['a', 'b', 'c', 'd'])
{insert: [(3, 'd')]}

>>> diff(['a', 'b', 'c'], ['a', 'c'])
{delete: [1]}