roi*_*ihn 3 response dynamic request mockserver
我现在使用https://www.mock-server.com/的模拟服务器并在 Docker 容器中运行它。
现在我想让响应随着请求正文的变化而变化。我在官方网站上查找动态响应有一段时间了,但不知道如何从请求正文中提取特定数据。
curl -v -X PUT "http://localhost:1080/mockserver/expectation" -d '{
"httpRequest": {
"path": "/some/path"
},
"httpResponseTemplate": {
"template": "return { statusCode: 200, body: request.body };",
"templateType": "JAVASCRIPT"
}
}'
Run Code Online (Sandbox Code Playgroud)
上面的代码是创建一个简单的期望,它将响应请求正文。例如,
$curl http://localhost:1080/some/path -d '{"name":"welly"}'
{"name":"welly"} //response
Run Code Online (Sandbox Code Playgroud)
现在我想改变回应的方式。例如,我想输入 {a:A, b:B} 并得到响应 {a:B, b:A}。
那么,如何修改request body中的json数据并交给response呢?我想有一些方法可以从json文件中提取特定数据,或者修改json数据等。另外,我想知道如何更好地搜索详细信息,因为官方网站和完整的REST API json规范(https:// app.swaggerhub.com/apis/jamesdbloom/mock-server-openapi/5.11.x#/expectation/put_expectation)对我来说很难理解。
多谢!
我也需要这样做,我想我已经做到了这一点,看看我的卷曲示例,希望能有所帮助:
curl -v -X PUT "http://localhost:1080/mockserver/expectation" -d '{
"httpRequest": {
"path": "/api/fun",
"method": "POST"
},
"httpResponseTemplate": {
"template": "
req = JSON.parse(request.body.string)
rid = req[\"id\"]
return { statusCode: 201, body: {new_id: rid} }
",
"templateType": "JAVASCRIPT"
}}'
Run Code Online (Sandbox Code Playgroud)
执行此操作后,如果发送:
curl -X POST http://localhost:1080/api/fun --data '{"id": "test_1"}'
Run Code Online (Sandbox Code Playgroud)
它应该返回:
{ "new_id" : "test_1" }
Run Code Online (Sandbox Code Playgroud)
Javascript 模板通过 Nashorn 引擎支持,因此从 Java 15 起将不再可用。这是来自Mockserver 文档的注释。
从 Java 15 开始,Nashorn 不再是 JDK 的一部分,但它可以作为需要 Java 11+ 的单独库提供。一旦 MockServer 最低 Java 版本为 11,就会使用这个单独的库。