1. 使用场景
作为一个iOS前端开发人员,不管是在日常工作中还是在学习中,不可避免的要用到后台接口数据来进行调试。试想一下,我现在正在学习网络模块,我需要一些接口来进行网络调试,但我又不懂后台开发,总不能让我去找后台的同事帮我写个接口吧!再比如实际项目开发过程中,我登陆界面都写好了,想要调试一下这个界面的接口,但是这个界面的接口后台都还没有开始写,那我是不是要等到后台把这个界面的接口写好了才能调试呢?还比如说有个接口返回的状态后很多种可能性,前端要根据不同的状态来做出相应的响应,那我调试时怎么模拟不同的返回状态呢?肯定不能每次调用接口都要后台改一下返回的状态吧!
等等类似的情况还有很多,那有没有什么办法能让我在不懂后台开发的情况下来模拟生成一些接口用来调试呢?当然是可以的,这里我们需要用到2个工具,一个是Easy Mock,用来生成假数据接口;另一个是抓包工具Charles,用来重定向网络请求的接口。
2. Easy Mock的简单使用
首先进入Easy Mock官网(https://www.easy-mock.com),注册账号并登陆后点击右下角的加号创建一个项目,项目名随便取一个,项目基础URL随便写,我这里写的test
,其他的可以不填。
创建好项目后点击项目进入项目页面,可以看到项目的
Base URL
是https://www.easy-mock.com/mock/5de22455fd8e2b4e3a66784a/test
,然后点击创建接口进入接口界面。项目页面
接口界面右边区域是接口设置区,可以选择接口请求方式是
get
还是post
还是其他的方式,URL
是这个接口的路由,我这里填的是login
,也就是一个登陆接口,这个和Base URL
拼接起来就是登陆接口的完整路径(https://www.easy-mock.com/mock/5de22455fd8e2b4e3a66784a/test/login
),然后填好描述信息。接口界面左边是返回数据的编辑区,这里可以写上一个固定的JSON数据,也可以根据Mockjs语法来随机生成数据(可以在左边输入em.demo.all
按回车看看demo是怎么写的)。我这里是一个登陆接口,调用的时候传入username
和'password'两个参数,然后对参数进行判断来返回不同的结果。(get请求获取传入的username参数的方法是_req.query.username
)。返回数据编写好后点击右边的”创建“按钮(我已经创建过了,所以这里显示的是'更新')来完成接口的创建。接口界面
接口创建完成后可以点击接口的
接口预览
按钮或者直接在浏览器输入接口的完整路径来调用接口,返回结果如下图所示,可以在右边区域添加一些参数。接口返回结果
这个接口在浏览器或者在web项目中可以直接使用,但是在APP中还不能正常访问,还需要通过
Charles
工具重定向后再使用。
3. Charles的使用
首先下载(https://www.charlesproxy.com/download/)并安装Charles
,然后启动Charles
,再选择屏幕最上面工具栏的Tools-->Map Remote
,然后点击Add
按钮进入添加重定向路径的页面。
如下图所示,重定向设置页面下面部分就是根据Easy Mock生成的接口路径https://www.easy-mock.com/mock/5de22455fd8e2b4e3a66784a/test/login
来填写;上面部分就是根据APP实际调用的接口来写,比如APP调用的接口是http://aaa.bbb/test/login
,那就如下图所示填写Map From
部分,都填好后点ok按钮完成设置,然后去APP里面调用接口进行测试。
4. 接口测试
// get方式请求
- (void)loginWithUsername:(NSString *)username password:(NSString *)password{
// 接口地址
NSString *urlStr = @"http://aaa.bbb/test/login";
// 拼接参数
urlStr = [NSString stringWithFormat:@"%@?username=%@&password=%@",urlStr,username,password];
// 编码
urlStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:20];
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"出错-->%@",error);
}else{
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableContainers error:nil];
NSLog(@"dic-->%@",dict);
}
}];
[task resume];
}
// 打印返回结果
2019-12-01 13:49:59.671818+0800 OCNetwork[8470:338881] dic-->{
code = 0;
data = {
loginDate = "2019-12-01 13:49:59";
token = 88888;
};
msg = "\U767b\U9646\U6210\U529f!";
}
网友评论