MockStore 功能介绍

优质
小牛编辑
122浏览
2023-12-01

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/都是一样的,配置起来很方便。

参数说明

名称类型是否必需说明
projectKeyString项目的唯一标识 Key,在项目的设置中查看
progroupKeyString项目组的唯一标识 Key,在项目组的设置中查看
apiPathStringNEI 中定义的接口地址

注意:

  • 请求的 method 必须和 NEI 中的定义保持一致。
  • 如果找到多个符合要求的接口,则返回的接口是随机的,其他情况见查询参数的匹配规则的说明。
  • 返回的 Mock 数据已经持久化。
  • projectKey 是项目的唯一标识,查看方式:查看项目的 Key。
  • progroupKey 是项目组的唯一标识,查看方式是类似的。

获取指定版本的接口

如果要获取指定版本的接口,需要将版本名称放在请求头 nei-api-version 中:

请求头名称类型是否必需说明
nei-api-versionString它的值就是接口的版本名称

查询参数的匹配规则

一般来说,如果接口的 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 请求延时响应毫秒数 的值,它是一个毫秒数值。