RESTful API接口的简单快速mock - python实现

有关mock的介绍请参考RESTful API接口的简单快速mock - nodejs实现

准备工作

  • 安装最新版的python
  • 安装flask pip install Flask

python实现的简单mock

完整源代码如下:

from flask import Flask
from flask import jsonify
from flask import request

app = Flask(__name__)

#预设用户信息
users=[
 {
 'id':'101',
 'name':'zhang san',
 'age':'29'
 },
 {
 'id':'201',
 'name':'Li si',
 'age':'32'
 }
 ]

#GET, 查询所有用户 
@app.route('/rest/users',methods=['GET'])
def getAlluser():
    return jsonify({'users':users})
    
#GET, 根据用户ID查询特定用户  
@app.route('/rest/users/',methods=['GET'])
def getuser(userId):
    usr = [ user for user in users if (user['id'] == userId) ] 
    return jsonify({'user':usr})
    
#PUT, 根据用户ID修改特定用户信息    
@app.route('/rest/users/',methods=['PUT'])
def updateuser(userId):
    em = [ user for user in users if (user['id'] == userId) ]
    if 'name' in request.json : 
        em[0]['name'] = request.json['name']
    if 'age' in request.json:
        em[0]['age'] = request.json['age']
    return jsonify({'user':em[0]})
    
#POST, 添加用户信息   
@app.route('/rest/users',methods=['POST'])
def createuser():
    dat = {
    'id':request.json['id'],
    'name':request.json['name'],
    'age':request.json['age']
    }
    users.append(dat)
    return jsonify(dat)
    
#DELETE, 根据用户ID删除特定用户   
@app.route('/rest/users/',methods=['DELETE'])
def deleteuser(userId):
    em = [ user for user in users if (user['id'] == userId) ]
    if len(em) == 0:
       abort(404)
    users.remove(em[0])
    return jsonify({'response':'Success'})
    
#设定监听端口为8889    
if __name__ == '__main__':
 app.run(host='127.0.0.1', port=8889)

改进版

改进版同时支持mock数据的返回和真实数据的返回,如果要返回真实数据,id必须是707.下面的代码实现了GET和POST部分。
在运行代码之前需要安装依赖pip install requests.

下面的代码假定真实的API是在RESTful API接口的简单快速mock - nodejs实现中实现的RESTful API(API路径以http://localhost:8888开头)。 完整源代码如下:

from flask import Flask
from flask import jsonify
from flask import request
import requests, json

app = Flask(__name__)

# 预设用户信息
users = [
    {
        'id': '101',
        'name': 'zhang san',
        'age': '29'
    },
    {
        'id': '201',
        'name': 'Li si',
        'age': '32'
    }
]


# GET, 查询所有用户
@app.route('/rest/users', methods=['GET'])
def getAlluser():
    return jsonify({'users': users})


# GET, 根据用户ID查询特定用户
@app.route('/rest/users/', methods=['GET'])
def getuser(userId):
    #如果id是707就转发到真实的API,并返回真实的API调用结果
    if userId == '707':
        res = requests.get('http://localhost:8888/users/1')
        return res.text
    # 如果ID不是707则返回MOCK的结果
    else:
        usr = [user for user in users if (user['id'] == userId)]
        return jsonify({'user': usr})


# PUT, 根据用户ID修改特定用户信息
@app.route('/rest/users/', methods=['PUT'])
def updateuser(userId):
    em = [user for user in users if (user['id'] == userId)]
    if 'name' in request.json:
        em[0]['name'] = request.json['name']
    if 'age' in request.json:
        em[0]['age'] = request.json['age']
    return jsonify({'user': em[0]})


# POST, 添加用户信息
@app.route('/rest/users', methods=['POST'])
def createuser():
    dat = {
        'id': request.json['id'],
        'name': request.json['name'],
        'age': request.json['age']
    }
    #如果id是707就转发到真实的API,并返回真实的API调用结果
    if request.json['id'] == '707':
        realData =  {
            "id": 707,
            "name": "seven"
            }
        res = requests.post('http://localhost:8888/users',data=realData)
        return res.text
    #如果ID不是707则返回MOCK的结果
    else:
        users.append(dat)
        return jsonify(dat)


# DELETE, 根据用户ID删除特定用户
@app.route('/rest/users/', methods=['DELETE'])
def deleteuser(userId):
    em = [user for user in users if (user['id'] == userId)]
    if len(em) == 0:
        abort(404)
    users.remove(em[0])
    return jsonify({'response': 'Success'})


# 设定监听端口为8889
if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8889)

你可能感兴趣的:(RESTful API接口的简单快速mock - python实现)