文章摘要
这篇文章介绍了如何使用mock工具模拟API延迟响应。可以通过全局参数为所有端点设置延迟,或使用中间件针对特定端点设置延迟(如让"some/endpoint"延迟2秒)。还展示了如何创建支持多语言的API代理服务。
文章总结
以下是文章主要内容的重新陈述,保留了关键细节并删减了无关内容:
延迟特定端点响应
通过结合Mock的基础API和延迟选项,可以轻松实现API的整体延迟:
bash
$ mock serve -p 8000 --base example.com --delay 2000
若只需延迟特定端点,可使用中间件:
bash
$ mock serve -p 8000 --base example.com --middleware '
if [ "${MOCK_REQUEST_ENDPOINT}" = "some/endpoint" ]
then
sleep 2 # 等待两秒
fi
'
此时localhost:8000将代理example.com,仅some/endpoint会有2秒延迟。
多语言API实现
通过不同路由执行对应语言代码:
bash
$ mock serve -p 3000 \
--route js --exec 'node <<EOF | mock write
console.log("Hello from Node.js!")
EOF' \
--route python --exec 'python3 <<EOF | mock write
print("Hello from Python!")
EOF' \
--route php --exec 'php <<EOF | mock write
<?php echo "Hello from PHP!\n"; ?>
EOF'
测试效果:
bash
$ curl localhost:3000/js # 输出:Hello from Node.js!
$ curl localhost:3000/python # 输出:Hello from Python!
$ curl localhost:3000/php # 输出:Hello from PHP!
有状态API示例
使用临时文件记录请求次数: ```bash $ export TMP=$(mktemp) $ printf "0" > "${TMP}"
$ mock serve -p 3000 --route '/hello' --exec '
printf "%s + 1\n" "$(cat ${TMP})" | bc | sponge "${TMP}"
printf "This server has received %s request(s) so far." "$(cat '"${TMP}"')" | mock write
'
测试时每次请求会显示累计次数:
bash
$ curl localhost:3000/hello # 第一次输出:已收到1次请求
$ curl localhost:3000/hello # 第二次输出:已收到2次请求
```
(注:删减了原始文档中的标题锚点链接和部分命令行注释,保留了核心功能演示和实现逻辑)
评论总结
以下是评论内容的总结:
功能询问
- 询问是否支持Windows系统:"Does it support Windows? I don’t see a Windows version on the GitHub releases page." (评论1)
- 询问与Swagger的区别:"How does this differ from swagger?" (评论7)
积极评价
- 认为工具实用:"Wonderful little tool!... it looks very useful." (评论2)
- 称赞命令行工具的易用性:"What a great tool!... Very easy to include commands straight into documentation." (评论8)
技术疑问
- 询问动态响应的实现难度和工具动机:"How hard/easy is it to make responses dynamic... Why should people switch?" (评论3)
- 指出名称冲突:"the name mock has also been used for the RPM build environment tool" (评论4)
幽默与讽刺
- 调侃延迟功能:"Ah, it's the 'billable hours' variable." (评论5)
用户体验批评
- 批评商业网站未利用URL存储状态:"It feels rude when sites ignore the UX improvement..." (评论6)
总结:评论中既有对工具的积极评价和实用性的肯定,也有关于功能、技术实现和名称的疑问。部分用户提出了改进建议或批评,涉及用户体验和工具区别等方面。