json rx架构验证工具
rxjson的Python项目详细描述
什么是RX?
将api添加到web服务时,必须选择如何对 你通过线路发送的数据。XML是一种常见的选择,但是它可以 变得神秘和笨重相当快。许多webservice作者希望 避免考虑XML,而是选择提供一些简单 与现代程序设计中常用数据结构相对应的数据类型 语言。换句话说,json和yaml。
不幸的是,虽然这些格式使传递复杂数据变得容易 结构,它们缺乏验证系统。xml有xml模式,并且放松 但这些标准很复杂,有时会让人困惑。他们不是 可以移植到json提供的数据结构中,如果您需要的话 为了避免将xml作为数据编码,编写更多的xml来验证第一个xml是 可能更不吸引人。
rx旨在提供一个与 json风格的数据结构和json本身一样容易使用。
用法
下面是一个如何根据rx模式验证json的小例子:
importrequestsfromrxjsonimportRximportunittestclassSporeTest(unittest.TestCase):"""Test generate spore schema."""deftest_spore(self):rx=Rx.Factory({"register_core_types":True})withopen('spore_validation.rx')asf:spore_json_schema=json.loads(f.read())spore_schema=rx.make_schema(spore_json_schema)resp=requests.get('http://localhost:8000/spore',headers={'Content-Type':'application/json'})self.assertTrue(spore_schema.check(resp.json))
或者更快:
>>>importjson>>>fromrxjsonimportRx>>>rx=Rx.Factory({"register_core_types":True})>>>spore_json_schema=json.loads(open('spore_validation.rx').read())>>>spore_schema=rx.make_schema(spore_json_schema)>>>js=json.loads("""{ ... "base_url": "http://localhost:8000", ... "expected_status": [200], ... "version": "0.1", ... "methods": { ... "put_data_item": { ... "path": "/data/:model_name/:data_item_id", ... "description": "Update a data item.", ... "required_params": ["model_name", "data_item_id"], ... "method": "PUT", ... "formats": ["json"] ... } ... }, ... "name": "daybed" ... }""")>>>spore_schema.check(js)True
- spore_validation.rx是https://github.com/SPORE/specifications的一部分
- daybed是表单模型验证api:https://github.com/spiral-project/daybed