我希望在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?"是不可能的。
我忽略了一些明显的事情吗?
答案 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]}