• Mock Server之flask_restful(python+flask)


    一、结构设计

    上一篇,写了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还有其他好处,这里先不赘述

  • 相关阅读:
    eclipse安装遇到无法安装的问题
    zip版本的jdk遇到的问题
    linux命令总结
    矢量图形语言
    牛客网答题知识记录
    eclipse里快捷键open type
    ubuntu进入与退出命令行模式
    查看电脑路由表
    strtus2.5报错显示:java.lang.ClassCastException:StrutsPrepareAndExecuteFilter cannot be cast to javax.servlet.Servlet
    Dockerfile总结-2
  • 原文地址:https://www.cnblogs.com/walkingtester/p/11392971.html
Copyright © 2020-2023  润新知