MockStore 功能介绍
NEI 目前已经发布了获取接口响应结果的 Mock 数据的在线接口,接口可以跨域调用,方便开发人员在本地测试接口,现说明如下:
请求地址
Mock 地址一:
https://nei.netease.com/api/apimock/:projectKey/:apiPath
Mock 地址二:
https://nei.netease.com/api/apimock-v2/:progroupKey/:apiPath
说明:Mock 地址一,是在某个项目中查找匹配的接口,查找速度快,推荐使用。Mock 地址二,是在某个项目组中查找匹配的接口,由于项目组中接口的数量可能会很多,所以查找速度比较慢,具体要看项目组中的接口数量。如果想在同个工程中调用多个项目中的接口,此时可以使用“Mock 地址二”,因为在同个项目组中的接口,请求地址的前缀
https://nei.netease.com/api/apimock-v2/:progroupKey/
都是一样的,配置起来很方便。
参数说明
名称 | 类型 | 是否必需 | 说明 |
---|---|---|---|
projectKey | String | 是 | 项目的唯一标识 Key,在项目的设置中查看 |
progroupKey | String | 是 | 项目组的唯一标识 Key,在项目组的设置中查看 |
apiPath | String | 是 | NEI 中定义的接口地址 |
注意:
- 请求的 method 必须和 NEI 中的定义保持一致。
- 如果找到多个符合要求的接口,则返回的接口是随机的,其他情况见查询参数的匹配规则的说明。
- 返回的 Mock 数据已经持久化。
- projectKey 是项目的唯一标识,查看方式:查看项目的 Key。
- progroupKey 是项目组的唯一标识,查看方式是类似的。
获取指定版本的接口
如果要获取指定版本的接口,需要将版本名称放在请求头 nei-api-version
中:
请求头名称 | 类型 | 是否必需 | 说明 |
---|---|---|---|
nei-api-version | String | 否 | 它的值就是接口的版本名称 |
查询参数的匹配规则
一般来说,如果接口的 method 和 path(请求地址,不包含查询参数)一样,则它们是同一个接口。
但有时候,我们希望可以通过查询参数映射到 Controller 或者 Service 的不同方法,比如下面两个接口 A 和 B:
接口 A:
POST /api/users/:id
接口 B:
POST /api/users/:id?lock
接口 A 是修改用户信息,接口 B 是锁定用户,这在后端肯定有两个对应的方法,可以在 Controller 中通过查询参数的不同,调用不同的 Service 方法。
考虑到上述原因,在查询目标接口时,会匹配查询参数并且遵循最大匹配原则,即:
- 接口定义中的请求地址(注意,是 NEI 平台上定义的请求地址,不包含请求参数),如果有查询参数,则在实际请求中,这些查询参数必须全部出现,只能多不能少。
- 如果匹配到了多个接口,则请求地址长度最长的接口胜出。
比如,如果实际请求是:
POST /api/users/:123?lock
则接口 A 和接口 B 都匹配,因为接口 B 的请求地址长度大于接口 A 的请求地址长度,所以最终匹配的是接口 B。
再比如,如果实际请求是:
POST /api/users/123
则只有接口 A 匹配,因为接口 B 中的查询参数 lock
在实际请求中不存在,匹配失败。所以最终匹配的是接口 A。
代码示例以及实现文档
MockStore 一共支持 11 种场景,具体的调用方式和说明请参考 MockStore 代码示例。
在编写具体的代码时,MockStore 也考虑到了较多的实际场景,比如参数的传递并不会只限制特定的方式,具体实现逻辑请查看 MockStore 实现说明。
FAQ
在线接口返回 403 没权限是怎么回事?
- 请检查接口的发送方式是否正确,注意,在浏览器中直接访问是
GET
方式,其他方式需要使用其他工具,比如 phosphorus。 - 请检查项目的 Key 是否正确。
有些字段前端无法发送,比如数据模型的 createTime 字段,这种情况如何解决?
- 可以使用前置业务逻辑脚本对请求发送过来的数据进行修改,请参考 MockStore 示例代码文档。
可以对请求参数做基本的检验吗?
- 可以使用前置业务逻辑脚本对请求参数做基本的检验,检测到有不合法的参数可以直接报错返回,请参考MockStore 实现说明文档。
可以实现分页的功能吗?
- 可以使用后置业务逻辑脚本,在返回数据之前根据请求的查询参数信息,返回用户要想要的分页数据,请参考 MockStore 示例代码文档。
为什么接口返回的数据和定义的不一致,而且修改了接口定义也无效?
- 此时一般是接口匹配错了,请检查项目中是否有相同请求地址的接口。注意,接口匹配时,是不会判断请求参数的,可以通过路径参数区分。
调用接口的时候,都会发生哪些异常?
- 如果生成 Mock 数据的过程中有错误发生,则会把错误信息放在响应结果的
_nei_apimock_error
字段中。比如生成规则的代码有语法错误等。 - 如果生成 Mock 数据花费的时间超过 1000 毫秒,则会报超时错误,此时响应结果是
Script execution timed out.
。比如生成规则中有死循环。 - 前置或者后置业务逻辑脚本有异常。
能否模拟接口响应延时
- 可以。在接口详情页面中可以设置延时时间,也就是
Mock 请求延时响应毫秒数
的值,它是一个毫秒数值。