{"id":342,"date":"2018-11-14T14:47:14","date_gmt":"2018-11-14T06:47:14","guid":{"rendered":"https:\/\/www.yinyubo.cn\/?p=342"},"modified":"2022-05-17T09:44:54","modified_gmt":"2022-05-17T01:44:54","slug":"apischema","status":"publish","type":"post","link":"https:\/\/www.yinyubo.com\/?p=342","title":{"rendered":"API\u6d4b\u8bd5\uff1a\u901a\u8fc7faker\u751f\u6210\u6d4b\u8bd5\u6570\u636e\uff0c\u901a\u8fc7schema\u68c0\u67e5\u8fd4\u56de\u7ed3\u679c"},"content":{"rendered":"<h1>\u9700\u6c42<\/h1>\n<p>\u5047\u5b9a\u6709\u5982\u4e3b\u56fe\u76f8\u540c\u7684http\u8bf7\u6c42\u3002\u6211\u4eec\u4e00\u822c\u7684\u505a\u6cd5\u662f\uff0c\u7528postman\u53bb\u6293\u53d6http\u8bf7\u6c42\uff0c\u7136\u540e\u4fee\u6539request\u7684body\u6216\u8005header\u91cc\u7684\u6570\u636e\uff0c\u70b9\u51fbsend\u6309\u94ae\uff0c\u68c0\u67e5\u8fd4\u56de\u7684response\u7684body\u662f\u5426\u6b63\u786e\u3002<br \/>\n<span style=\"color: #ff0000;\">\u5bf9\u4e8e\u8f93\u5165\u3002<\/span>\u4e00\u822c\u6765\u8bf4\uff0c\u6211\u4eec\u4f1a\u7eaf\u624b\u5de5\uff0c\u6216\u8005\u534a\u81ea\u52a8\u7684\uff0c\u8bbe\u8ba1\u6d4b\u8bd5\u7528\u4f8b\u3002\u4f8b\u5982\u4f7f\u7528\u8fb9\u754c\u503c\u5206\u6790\uff0c\u7b49\u4ef7\u7c7b\u5212\u5206\u7b49\u65b9\u6cd5\uff0c\u7528\u5728\u6211\u4eec\u7684\u8f93\u5165\u53c2\u6570\u4e2d\u3002\u6bd4\u5982\u6211\u53c2\u6570\u4e2d\u7684configname\u6700\u591a200\u4e2a\u53c2\u6570\uff0c\u6211\u6d4b\u8bd5\u8f93\u5165201\u4e2a\u53c2\u6570\u3002<br \/>\n<span style=\"color: #ff0000;\">\u5bf9\u4e8e\u8f93\u51fa\u3002<span style=\"color: #000000;\">\u4e00\u822c\u6765\u8bf4\uff0c\u6211\u4eec\u5927\u90e8\u5206\u65f6\u5019\u662f\u8089\u773c\u68c0\u67e5\uff0c\u6216\u8005\u5199\u4ee3\u7801\uff0c\u901a\u8fc7jsonpath\u53d6\u53c2\u6570\uff0c\u7136\u540e\u5224\u65ad\u662f\u5426\u5b58\u5728\u6765\u68c0\u67e5\u3002<\/span><\/span><br \/>\n\u8fd9\u91cc\u6211\u6253\u7b97\u7528\u4e00\u4e2a\u65b0\u7684\u65b9\u6cd5\u6765\u964d\u4f4e\u6d4b\u8bd5\u7684\u624b\u5de5\u7279\u6027\uff0c\u8ba9\u4ed6\u66f4<span style=\"color: #ff0000;\">\u81ea\u52a8\u5316<\/span>\u4e00\u70b9\u3002\u4ee5\u4e0b\u60f3\u6cd5\u8fd8\u5904\u4e8e\u8c03\u8bd5\u9636\u6bb5\uff0c\u7528\u4e8e\u5927\u89c4\u6a21\u4f7f\u7528\uff0c\u6682\u65f6\u4e0d\u884c\u3002<\/p>\n<h1>\u8bbe\u8ba1<\/h1>\n<p><span style=\"color: #ff0000;\">\u8f93\u5165\u4fee\u6539\u65b9\u6848\uff1a<span style=\"color: #000000;\">\u5f15\u5165faker\u5e93\u548cjsonschema\u5e93\u3002\u901a\u8fc7\u8fd9\u4e24\u4e2a\u5e93\uff0c\u6211\u4eec\u53ef\u4ee5\u4ea7\u751f\u968f\u673a\u7684json\u4e32<\/span><\/span><br \/>\n<span style=\"color: #000000;\">faker<\/span>\u662f\u6211\u65e0\u610f\u4e4b\u95f4\u53d1\u73b0\u7684\uff0c\u80fd\u6309\u7167\u89c4\u5f8b\u4ea7\u751f\u968f\u673a\u5b57\u7684\u5e93\uff0c\u4f8b\u5982<\/p>\n<pre class=\"\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"golang\">fake.name()<\/code><\/pre>\n<p>\u662f\u4ea7\u751f\u4e00\u4e2a\u968f\u673a\u7684\u540d\u5b57\uff0c\u53ea\u8981\u52a0\u5165\u9002\u5f53\u7684providers\uff0c\u5c31\u80fd\u6309\u7167\u9700\u8981\u7684\u89c4\u5219\u4ea7\u751f\u968f\u673a\u5b57<br \/>\njsonschema\u8fd9\u4e2a\u7528\u7684\u4eba\u5f88\u591a\uff0c\u8fd9\u91cc\u5c31\u4e0d\u4ecb\u7ecd\u4e86\uff0c\u4e0b\u9762\u63a8\u8350\u4e00\u4e2a\u7f51\u7ad9\uff0c\u80fd\u628ajson\u8bf7\u6c42\u8f6c\u6362\u4e3aschema\u683c\u5f0f<br \/>\n<a href=\"https:\/\/jsonschema.net\/\"><span style=\"color: #3366ff;\">https:\/\/jsonschema.net\/<\/span><\/a><br \/>\nschema\u4e2d\u4f1a\u6ce8\u660e\u6bcf\u4e2a\u5b57\u6bb5\u7684\u89c4\u5219\uff0c\u4f8b\u5982\u662fstring\u7c7b\u578b\u8fd8\u662finteger\u3002<br \/>\n<span style=\"color: #ff0000;\">\u8f93\u51fa\u4fee\u6539\u65b9\u6848\uff1a<span style=\"color: #000000;\">\u4f7f\u7528jsonschma\u7684validate\u65b9\u6cd5\u6765\u68c0\u67e5(\u8fd9\u79cd\u68c0\u67e5\u65b9\u6cd5\u76ee\u524d\u6709\u4e00\u4e9b\u68c0\u67e5\u4e0d\u5145\u5206\uff0c\u4f46\u662f\u5df2\u7ecf\u53ef\u4ee5\u8ba9\u6d4b\u8bd5\u4eba\u5458\u51cf\u5c11\u4e00\u4e9b\u5de5\u4f5c\u91cf\u4e86)<\/span><\/span><\/p>\n<pre class=\"\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"golang\">jsonschema.validate(response, schema)<\/code><\/pre>\n<h1>\u4f7f\u7528\u65b9\u6848<\/h1>\n<p>1.\u53bbpostman\u6293\u53d6http\u8bf7\u6c42\uff0c\u5e76\u4e14\u8bb0\u5f55\u4e0b\u6240\u9700\u8981\u7684\u8f93\u5165json\u548c\u8f93\u51fajson<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-344 size-full\" src=\"https:\/\/yinyubo-1257235934.cos.ap-nanjing.myqcloud.com\/content\/\u6b65\u9aa41.png\" alt=\"\" width=\"810\" height=\"579\" \/><br \/>\n2.\u6253\u5f00https:\/\/jsonschema.net\/ \u628a\u8f93\u5165json\u548c\u8f93\u5165json \u8f6c\u6362\u6210jsonschema<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-345 size-large\" src=\"https:\/\/yinyubo-1257235934.cos.ap-nanjing.myqcloud.com\/content\/\u6b65\u9aa42-1024x525.png\" alt=\"\" width=\"900\" height=\"461\" \/><br \/>\n3.\u628a\u8f93\u5165jsonschema\u6587\u4ef6\uff0c\u8f93\u51fa\u6587\u4ef6jsonschema\u653e\u5165\u76f8\u5e94\u7684\u76ee\u5f55\uff0c\u81ea\u5df1\u5199\u4e00\u4e2a\u7528\u4e8e\u751f\u6210\u968f\u673arequestbody\u7684provider\u548c\u4e00\u4e2a\u6d4b\u8bd5\u7528\u7684\u4e3b\u51fd\u6570<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-346 size-full\" src=\"https:\/\/yinyubo-1257235934.cos.ap-nanjing.myqcloud.com\/content\/\u6b65\u9aa43.png\" alt=\"\" width=\"474\" height=\"413\" \/><br \/>\n4.\u8fd0\u884c\u6d4b\u8bd5\u4e3b\u5165\u53e3\u6587\u4ef6\uff0c\u6253\u5370\u4e00\u4e0b\u53d1\u9001\u7684json\u6587\u4ef6\uff0c\u770b\u662f\u4e0d\u662f\u968f\u673a\u5316\u4e86\uff0c\u7ed3\u679c\u662f\u786e\u5b9e\u968f\u673a\u5316\u4e86\u3002<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-347 size-large\" src=\"https:\/\/yinyubo-1257235934.cos.ap-nanjing.myqcloud.com\/content\/\u6b65\u9aa44-1024x291.png\" alt=\"\" width=\"900\" height=\"256\" \/><\/p>\n<h1>\u4ee3\u7801<\/h1>\n<p>\u6d4b\u8bd5\u4e3b\u5165\u53e3test_json_from_schema.py<\/p>\n<pre class=\"lang:python decode:true  EnlighterJSRAW\" data-enlighter-language=\"golang\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"golang\">#!\/usr\/bin\/env python\n# -*- coding: UTF-8 -*-\nimport json\nimport faker\nimport jsonschema\nimport requests\nfrom jsonschema.exceptions import ValidationError\nimport jsonprovider\ndef generate_request(request_json_schema):\n    '''\n    \u901a\u8fc7schema\u751f\u6210\u968f\u673a\u6d4b\u8bd5\u6570\u636e\n    :param request_json_schema:\n    :return:\n    '''\n    fake = faker.Faker()\n    fake.add_provider(jsonprovider.JSONProvider)\n    request_body = fake.json(json.load(open(request_json_schema)))\n    print(request_body)\n    return request_body\ndef check_json_schema(response, schema):\n    '''\n    \u901a\u8fc7json_schema\u68c0\u67e5\u8fd4\u56de\u7684json\u4e32\n    :param response:\n    :param schema:\n    :return:\n    '''\n    result = True\n    try:\n        jsonschema.validate(response, schema)\n    except ValidationError, e:\n        print(\"fail\")\n        result = False\n    return result\nif __name__ == '__main__':\n    # \u751f\u6210request body\n    body = generate_request(\"schema_file\/create_config_request_schemas.json\")\n    # \u4f7f\u7528request\u5e93\u53d1\u9001post\u8bf7\u6c42\n    url = \"https:\/\/dev.honcloud.honeywell.com.cn:8080\/dashboard\/clustercentre\/configmng\/newconfig\/addconfig\"\n    headers = {\"Content-Type\": \"application\/json\", \"authorization\": \"48a5eb61-914e-4b3a-a7a3-0b25f72d06d7\"}\n    response = requests.post(url, data=body, headers=headers)\n    print(response.json())\n    response_json=response.json()\n    response_schema=\"schema_file\/create_config_response_schemas.json\"\n    # \u7528\u751f\u6210\u7684response\u7684schema\u6765\u68c0\u67e5\n    result=check_json_schema(response_json,response_schema)\n    print(result)\n<\/code><\/pre>\n<p>jsonprovider.py\u53ef\u4ee5\u81ea\u884c\u767e\u5ea6\u4e00\u4e2afaker\u7684provider\u7684\u65b9\u6848\uff0c\u6211\u8fd9\u91cc\u505a\u7684\u4e5f\u4e0d\u597d\uff0c\u968f\u673a\u51fa\u6765\u7684\u503c\u53ea\u9075\u5faa\u4e86\u5b57\u7b26\u7c7b\u578b\uff0c\u540e\u9762\u4f1a\u8003\u8651\u878d\u5408\u6211\u4eec\u7684\u8fb9\u754c\u503c\u5206\u6790\uff0c\u7b49\u4ef7\u7c7b\u5212\u5206\u7684\u65b9\u6848\u8fdb\u6765\uff0c\u5b8c\u5584\u8fd9\u4e2ajsonprovider.py\u4e4b\u540e\u518d\u653e\u51fa\u6765<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9700\u6c42 \u5047\u5b9a\u6709\u5982\u4e3b\u56fe\u76f8\u540c\u7684http\u8bf7\u6c42\u3002\u6211\u4eec\u4e00\u822c\u7684\u505a\u6cd5\u662f\uff0c\u7528postman\u53bb\u6293\u53d6http\u8bf7\u6c42\uff0c\u7136\u540e\u4fee\u6539reque [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":343,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,10],"tags":[],"class_list":["post-342","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","category-10"],"_links":{"self":[{"href":"https:\/\/www.yinyubo.com\/index.php?rest_route=\/wp\/v2\/posts\/342","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yinyubo.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yinyubo.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yinyubo.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yinyubo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=342"}],"version-history":[{"count":2,"href":"https:\/\/www.yinyubo.com\/index.php?rest_route=\/wp\/v2\/posts\/342\/revisions"}],"predecessor-version":[{"id":936,"href":"https:\/\/www.yinyubo.com\/index.php?rest_route=\/wp\/v2\/posts\/342\/revisions\/936"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yinyubo.com\/index.php?rest_route=\/wp\/v2\/media\/343"}],"wp:attachment":[{"href":"https:\/\/www.yinyubo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=342"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yinyubo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=342"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yinyubo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=342"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}