Postman高级应用(11):可以开始对接了吗——Mock服务
场景
通过上一节的学习我们掌握了如何生成并发布接口文档,可是现实总是残酷的。前端团队往往不满足于干巴巴的接口文档,他们需要对接真实的数据,但这样很受限于后端开发进度,于是便有了Mock(模拟)这种东西,也就是我们平时常说的“造 假数据”。Mock并不是Postman先提出的,在没接触Postman之前,不少前端团还是有一些自己熟悉的Mock工具。大多数情况下,mock都是由前端团队来驱动完成的。
利用Postman的Mock Server功能,我们可以把现成的请求模拟数据。前端请求Mock的接口地址,就能返回我们预先模拟好的数据,而不依赖于后端的开发进度。同时,还能解决在家远程办公而无法连接公司内网服务问题,以及开发初期由于服务不稳定引起的其他问题。
实战
看过不少介绍Postman Mock的相关文章,它们大多数都使用创建好的集合和请求示例来Mock,而忽略了通过新建API的这种方式来Mock接口,并没有把Mock的一些基本概念讲清楚。
Postman提供的Mock Server方式有两种:
- 新建API
- 使用工作区的集合
我们先通过新建API的方式让大家对Mock的概念有个基本的理解。
方式一:新建API
- 点击Postman主窗口左上角的
New
,选择Mock Server
。在弹出的新窗口中,我们可以看到有两种创建方式,默认选择的是第一种Create a new API
。中间有个类似表格一样的东西,有请求方法、请求路径、响应码、响应体这几项,也就是说,一个标准的mock须包含以上几项。
我们先填写一个API:请求方法是GET,请求路径是test,响应码是200,响应体是ok。值得注意的是,请求路径前面为什么加了个{{url}}/
?这是因为Postman匹配路径的时候会忽略掉前面协议和域名这一块,而域名之后的部分才是我们所关心的。 - 填完API,点下一步。我们的mock名字就叫
test_mock
吧。先别勾选Make this mock server private
,这个我后面会解释。完成后点创建,你会得到一个Postman分配给的网址,这个网址是以mock.pstmn.io
域名结尾的,这个就是对于刚才创建的API对应的mock地址。
如果你不小心关掉没保存下来也没关系,你会发现左侧多了一个集合,Postman自动为我们刚才填写的API创建了一个同名的新集合。集合里包含一个请求,请求里包含一个示例,点开发现全是我们刚才填写的内容。我们点集合三角形展开详细面板,选择Mocks
选项卡,就可以找回刚才分配的mock地址了。不仅如此,还自动创建了一个同名的环境变量,里面包含一个url的值,正是我们刚刚分配的mock地址。 - 我们打开Postman为我们自动创建的那个请求
test
,运行环境选择自动创建的test_mock
(即你刚才填写的mock名称),直接点运行,返回结果正是我们刚才填入的ok
值。把鼠标移动请求地址的{{url}}
上,发现被替换成真正的mock地址。我们通过Code功能把请求地址拷贝到浏览器请求一下,发现返回结果还是我们想要的。至此,你已经成功学会了如何mock,而且对mock的概念有了基本的理解。 - 再讲多一点,我们在地址栏后面加上
/1
,最终变成{{url}}/test/1
,再请求一次会有什么变化?如果把test
变成test1
,结果又是怎样呢?大家可以试试。其实这里涉及到了Mock Server的匹配算法,我们不会展开来讲,先简单理解为支持模糊匹配,并返回最接近的请求示例响应。
方式二:使用集合
-
先创建一个集合,在集合里创建一些请求,为请求添加一个示例。如果不懂的可以先看上一节关于请求示例的添加
注意:示例创建之后可以修改。一个请求可以包含多个示例,只会返回最符合要求的示例响应。 -
为该集合添加Mock。点击左侧集合旁边的三角形,展开详情面板。选择
Mocks
选项卡,点击Add a mock
进入打开添加窗口。操作方法跟上面一样,只不过不需要手动填mock名称,完成后同样会得到一个mock地址。至于如何使用上面已经提过了,这里不再赘述。
私有mock server
- 在创建mock的界面,有一项是
Make this mock server private
。不勾选的话,我们的mock地址公布出去,谁都可以访问,会造成不必要的麻烦。我们重新生成一个mock server,这次勾选设为私有。 - 打开 https://go.pstmn.io/pro-api-keys ,点击
Get API key
生成一个**,名字可以叫使用者的名字方便管理。这里可以看到我们所有生成的key,可以禁用或删除。
注意:生成的api key并不是专门用于mock server,还可以用于Postman提供的其他服务中。 - 如果我们直接请求会返回没有访问权限,这就对了,因为我们还差最后一步。在请求的头部加入
x-api-key
,再次请求即可正常返回数据。当然,这个api key我们正常应该写在全局变量里,比较好维护。