如何发送由 header 值驱动的 wiremock 存根响应
How to send wiremock stub responses driven by header value
我需要用 wiremock 构建一个存根并让它 return 一个响应或另一个基于某个 header 使用简单规则的响应:
- 如果 header 以 400 sed 返回
Bad Request
响应
- 如果 header 以 500 开头,则发回
Internal Server Error
响应
- 对于任何其他 header 发回
Accepted
响应
{
"request": {
"request": {
"method": "POST",
"urlPattern": "/v1/my/path"
}
},
"response": {
"headers": {
"Content-Type": "application/json"
},
"bodyFileName": "files/{{request.headers.<first.three.characers.of.my.header matching 400/500 or 202 otherwise>}}-response.json"
}
}
提前感谢您的投入
如果您只需要一个映射,那么您必须编写一个自定义扩展来实现它。我不相信只有 return 前三个字符的解析足够智能。此外,您需要为每个可能在 header.
中发送的状态代码创建一个 JSON 文件
相反,您可以拥有三个包含所需匹配项的独立映射。
{
"priority": 1,
"request": {
"url": "/some/path",
"headers": {
"some-header": {
"matches": "400.*"
}
}
},
"response": {
"status": 400,
"bodyFileName": "some-400-response.json",
}
}
{
"priority": 1,
"request": {
"url": "/some/path",
"headers": {
"some-header": {
"matches": "500.*"
}
}
},
"response": {
"status": 500,
"bodyFileName": "some-500-response.json",
}
}
{
"priority": 2,
"request": {
"url": "/some/path"
},
"response": {
"status": 200,
"bodyFileName": "some-other-response.json",
}
}
这些映射中发生的两件主要事情是:
- 使用优先级(1 用于特定 400/500 案例,2 用于一般案例)
- 匹配 header 值(正则表达式匹配前三个字符,然后 (.*) 匹配 header 的其余部分)
我需要用 wiremock 构建一个存根并让它 return 一个响应或另一个基于某个 header 使用简单规则的响应:
- 如果 header 以 400 sed 返回
Bad Request
响应 - 如果 header 以 500 开头,则发回
Internal Server Error
响应 - 对于任何其他 header 发回
Accepted
响应
{
"request": {
"request": {
"method": "POST",
"urlPattern": "/v1/my/path"
}
},
"response": {
"headers": {
"Content-Type": "application/json"
},
"bodyFileName": "files/{{request.headers.<first.three.characers.of.my.header matching 400/500 or 202 otherwise>}}-response.json"
}
}
提前感谢您的投入
如果您只需要一个映射,那么您必须编写一个自定义扩展来实现它。我不相信只有 return 前三个字符的解析足够智能。此外,您需要为每个可能在 header.
中发送的状态代码创建一个 JSON 文件相反,您可以拥有三个包含所需匹配项的独立映射。
{
"priority": 1,
"request": {
"url": "/some/path",
"headers": {
"some-header": {
"matches": "400.*"
}
}
},
"response": {
"status": 400,
"bodyFileName": "some-400-response.json",
}
}
{
"priority": 1,
"request": {
"url": "/some/path",
"headers": {
"some-header": {
"matches": "500.*"
}
}
},
"response": {
"status": 500,
"bodyFileName": "some-500-response.json",
}
}
{
"priority": 2,
"request": {
"url": "/some/path"
},
"response": {
"status": 200,
"bodyFileName": "some-other-response.json",
}
}
这些映射中发生的两件主要事情是:
- 使用优先级(1 用于特定 400/500 案例,2 用于一般案例)
- 匹配 header 值(正则表达式匹配前三个字符,然后 (.*) 匹配 header 的其余部分)