一、结构设计
上一篇,写了Mock Server的基础实现与被测系统的对接
当我们要mock 的 api越来越多的时候,路由与相关的方法都堆在app.py中就不合适了,不可拔插,可读性也比较差,因此要调整下结构。
期望结果:
1、app.py中只负责server的配置信息
2、各个路由与对应的方法可在独立的文件中维护
3、方便拔插
如下图,resources中分别维护各个API,在app.py中配置server信息及拔插API(这个也可以分成两个文件),common中放公共方法
二、Flask-RESTful
这里我们引入Flask-RESTful来实现一中的内容。
首先安装:pip install Flask-RESTful
1、Resources
Flask-RESTful 提供的最主要的基础就是资源(Resources)。资源(Resources)是构建在 Flask 可拔插视图 之上,只要在你的资源(Resource)上定义方法就能够容易地访问多个 HTTP 方法。
我们看一下API1中的代码:
1 __author__ = 'xumj' 2 from flask_restful import Resource 3 from flask import request,jsonify 4 5 6 def data_to_dict(data): 7 data_dict = dict((line.split('=') for line in data.split('&'))) 8 return data_dict 9 10 class API1(Resource): 11 def get(self): 12 result = {'code':1000,'result':'test1'} 13 print 'get request' 14 return jsonify(result) 15 16 def post(self): 17 print 'post request' 18 data = request.data 19 if not data or data == 'None': 20 print 'no data' 21 result = {'code':500,'result':'','msg':'data is not find'} 22 return jsonify(result) 23 else: 24 data = data_to_dict(data) 25 26 if not data.has_key('num'): 27 result = {'code':601,'result':'','msg':'num can not be empty'} 28 else: 29 result = {'code':2000,'result':'test2','msg':'num is' + data['num']} 30 return jsonify(result)
上面的代码废话比较多,我们说下主要的东西:
首先from flask_restful import Resource
然后定义类class API1(Resource)
接着按需在类下定义相应的http方法,如get、post、put、delete(对应请求的method)
2、配置URLS
我们在app.py中配置相关信息:
首先import Api及resources文件中的对应API类
然后通过api.add_resource()添加api及对应的URLS(如图,一个API可以对应多个URL),如果某个API的方法有问题或不想开放,则这里不添加就可以。
PS:这块可独立在一个文件中配置
1 #coding:utf-8 2 __author__ = 'xumj' 3 from flask import Flask 4 from flask_restful import Api 5 from resources.API1 import API1 6 from resources.API2 import API2 7 8 9 10 app = Flask(__name__) 11 api = Api(app) 12 api.add_resource(API1, '/API1') 13 api.add_resource(API2, '/API2','/API3') 14 15 if __name__ == '__main__': 16 app.run(debug=True,host='0.0.0.0',port=9003) 17 #host:主机ip,配置为0.0.0.0或主机的ip,则其他同网络环境设备就可以访问该server 18 #port:端口号,根据实际情况自定义设置,如5000
3、Flask-RESTful还有其他好处,这里先不赘述