Android MOCK HTTP 接口新方式

前言

以往,我们想要模拟接口返回数据,一般是利用 Charles 作为代理中转,配合在线 MOCK 网站 mocky.io,以模拟接口返回。

charles

一般需要以下几个步骤:

  1. 下载、安装 Charles
  2. 手机连接 Charles 代理
  3. 访问 mock.io 创建模拟数据网址
  4. 使用 Charles 将需要模拟的接口映射到该网址

如果是 HTTPS 请求,手机还需要安装证书,有些手机安装证书可能失败(至今我还没有成功过),过程将更加繁琐。

详细可参考该文章:模拟服务器返回数据

提升效率

下面,我将介绍一种新的 MOCK 方案,只需一步即可模拟接口返回,而且更加易用。

更加直观的感受,可以查看视频演示

实现思路

总体设计

先看下架构设计图

架构图

启动 MOCK-HTTP 后,注册 OKHTTP 拦截器,MOCK-HTTP 会启动一个本地 Server,监听请求。

APP 发送网络请求,会到拦截器处理,拦截器向 MOCK-HTTP 查询该路径是否有 MOCK 响应,如果有就偷天换日,返回 MOCK 数据,否则不拦截该请求,最后记录下该次请求的数据,通知 MOCK-HTTP 保存。

使用 WEB 浏览器访问本机 IP 和对应端口,本地 Server 向 MOCK-HTTP 查询后返回当前缓存的请求数据,点击某条请求可以查看和修改响应结果,点击修改后本地 Server 通知 MOCK-HTTP 保存 MOCK 数据。

具体实现

先说下背景,一直苦于无法方便的 MOCK 接口,偶然间想到鸿神的一篇很有意思的文章解决一位群友问题 Android上的隔空取物,可以实现局域网中的其他设备可以和 APP 通信。

受到这篇文章的启发,我们可不可以通过 WEB 浏览器向 APP 发送请求,设置接口 MOCK 数据,APP 中通过拦截请求,达到 MOCK 的目的?

有了想法就开始干!

项目建好,添加 AndroidAsync 依赖

image

assets 下新建一个 index.html,用于 WEB 页面展示

image

分为已 MOCK 请求 和未 MOCK 请求两部分,方便查看

然后启动本地 Server

image

/ 匹配根路径,返回我们刚才在 assets 下创建的 index.html,跑起来试一下

image

服务已经启动,只不过没有请求数据展示,接下来我们需要拦截 HTTP 请求,新建一个 OKHTTP Interceptor,在这之前,我们先创建一个 HTTP 请求的管理器,并作为连接本地 Server 和请求拦截器的桥梁

新建一个 data class 用于保存 HTTP 请求信息

image

新建一个 HTTP 请求的管理器 MockHttp,也是我们的总入口

image

方法都折叠了,因为比较简单,一看注释就懂了。提供了初始化和销毁,获取当前请求的 MOCK 结果,记录 HTTP 请求,以及提供给本地 Server 的查询已缓存的 HTTP 请求。

接下来终于可以创建 OKHTTP 拦截器了

image

为了不影响后续的流程,我们先 copy 一份 request,记录下 request 的信息,从 MockHttp 中查询改请求的 MOCK 结果,如果没有,就走后续流程,如果有,就直接返回 MOCK 结果,最后记录下本次请求信息,以便我们通过 WEB 浏览器查看。

本地代码都已准备就绪,那么如何把请求信息展示在 WEB 浏览器呢?

嗯这对于一个不懂前端的无线开发者来说的确是一个问题,好在有 W3C 这个菜鸟专属网站,摸索了一天,终于可以请求和展示数据了。

我们仍然通过本地 Server 提供 API 接口,供 HTML 调用,新增如下 API

image
  • /request 返回一个用于展示 HTTP 请求信息的二级页面
  • /getRequestList 获取本地缓存的 HTTP 请求信息列表,用于 / 返回的页面(即首页)中调用
  • /getRequest 获取单个 HTTP 请求信息,用于 /request 返回的页面中调用
  • /mock MOCK 一个 HTTP 请求的响应结果
  • /unmock 有了 MOCK 当然要有取消 MOCK

API 已经准备好,下面到了最“困难”的步骤了,编写 HTML 代码,前端大神可以忽略这部分~

先看首页,刚才我们已经写了个简单地静态页面,现在要添加请求数据的代码,我们使用 ajax

image

window.onload 回调中请求接口,分别请求已 MOCK 的请求列表和未 MOCK 的请求列表,然后添加到页面中

接下来我们要新建一个 request 二级页面,用于展示请求详细信息,以及修改响应结果

image

HTML 依然很简单,展示请求头、请求体、响应头、响应体等,响应体使用 textarea 包裹,可以修改响应结果,发送 ajax 请求的代码就不贴了,和首页的类似。

MOCK 和取消 MOCK 的请求也是类似的,就不再重复贴代码了。

万事俱备,就差一个 demo 来实践一下了

我们引用 wanandroid 网站提供的接口,选两个简单点的放在 demo 中
)

image

点击按钮发送请求,然后去 WEB 浏览器查看

image

终于看到请求数据了!看一下二级页面

image

已经可以看到请求的详细信息了,我们修改下响应结果,然后点击 MOCK

image

回到 demo 再发一次请求,激动人心的时候到了

image

成功了!!!

结语

至此,我们已经实现了一个不依赖第三方工具的 MOCK 接口插件,由于是通过 OKHTTP 拦截器实现,因此不区分 HTTP 和 HTTPS。

文章中用到的技术都不难,但却能让平时的接口开发调试效率倍增,希望大家喜欢~

源码

我已经将以上代码整理封装为一个库,源码和使用说明可以点击以下链接,欢迎 Star 和 Fork 😀

https://github.com/wangchenyan/mock-http

致谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342