用自定义 slug 获得稳定的模拟接口 URL

自己选定 slug,模拟接口的 URL 就能在每次删除和重建后保持不变:在 .env、CI 和 Postman 里只需配置一次,不必再追着新地址跑。

随机生成的模拟接口 URL 很适合一次性的测试,但对任何需要记住它的地方来说都是麻烦。一旦重建模拟接口,地址就变了,你的 .env 文件、CI 密钥和团队共享的 Postman 环境里的值也就跟着失效。自定义 slug 让你只需选择一次地址:创建模拟接口时通过 API、CLI 或网页表单传入 slug,之后 https://quickmock.dev/m/my-app-payments-dev 在删除并重建之后依然可用,只要这个名字没有被别人占用。

为什么随机的模拟接口 URL 会碍事?

每个没有指定 slug 创建的模拟接口都会得到一个 12 位的随机 slug,对一次性测试来说这正是想要的。但一旦这个 URL 被写到了别的地方,它就成了问题。你删除模拟接口再重新创建,得到的是另一个 slug,于是所有记着旧地址的地方都指向了空处:同事笔记本上的 .env 文件、CI 设置里的密钥、共享 Postman 集合里的环境、合作伙伴沙箱配置里的基础 URL。

自定义 slug 把地址变成你只需选择一次的东西。https://quickmock.dev/m/my-app-payments-dev 可以粘贴到上述所有地方,之后就不用再动了。它背后的模拟接口依然可以删除、换成不同的响应,或者任其过期后再重建;只要创建时使用相同的 slug,调用方所用的 URL 就永远不会变。

这样用起来也更省心。日志行、堆栈跟踪或失败的流水线里出现一个可读的名字,不用再去查找就知道涉及的是哪个模拟接口。

如何用自己的 slug 创建模拟接口?

创建模拟接口时传入 slug。在 API 里它只是多一个 JSON 字段:

curl -X POST https://quickmock.dev/api/mocks \
  -H 'Content-Type: application/json' \
  -d '{"slug":"my-app-payments-dev","method":"GET","response_status":200}'

CLI 为此提供了一个参数,网页表单在路径后缀旁边也有一个自定义 slug 输入框:

quickmock create -slug my-app-payments-dev -s 200 -b '{"status":"ok"}'

slug 由 4 到 48 个字符组成:小写字母、数字和连字符,并且以字母或数字开头和结尾。首尾的空格会被去掉,大写字母会被转成小写,所以 My-App-Dev 会变成 my-app-dev。省略该字段或传入空值,就会像以前一样得到随机 slug。格式不合规的 slug 会被 422 validation_failed 拒绝,并且不会创建任何东西。

如果这个名字不能使用,响应是 409 slug_taken。无论是另一个仍在运行的模拟接口占用了该 slug,还是这个名字因其他原因不可用,返回的都是同一个答案,所以换一个名字再试即可。

这个 URL 能为你保留多久?

使用自定义 slug 的模拟接口和其他模拟接口一样有生命周期。它会在你设置的 ttl_seconds 之后过期,没有设置时则按服务端默认值过期,而且从创建那一刻起最长不超过 30 天。在此之前,这个 URL 会一直有响应。

想让它继续存活,请用创建时拿到的管理令牌来续期:

curl -X POST https://quickmock.dev/api/mocks/my-app-payments-dev/extend \
  -H "Authorization: Bearer $ADMIN_TOKEN"

这会把过期时间往后推,但绝不会超过 30 天的上限。达到上限后,该调用会返回 409 ttl_cap_reached,模拟接口将按计划过期。

模拟接口一旦消失,它的 slug 就立即释放。用 DELETE /api/mocks/<slug> 删除模拟接口,或者让它自然过期,紧接着的下一次创建请求就可以重新占用同一个 slug,方法、状态码或响应体想换就换。稳定 URL 就是这样轮换的:地址不变,背后的模拟接口是新的,并且附带一个全新的管理令牌。

通常会在哪里出错?

  • 把机密放进响应里。可读的 slug 很容易被猜到,猜到的人就可以调用这个 URL。请把响应体当作公开内容:不要放真实的密钥、令牌或个人数据。请求日志则是另一回事,默认是私有的,只有凭管理令牌才能查看,除非你创建模拟接口时设置了 logs_public。
  • 选了太通用的名字。先到先得。像 test、demo 或 api 这样的名字几乎肯定已经被占用。请在 slug 前加上团队和应用的前缀,例如 acme-checkout-staging。
  • 以为这个 slug 已经为你保留。只有在模拟接口存活期间,slug 才属于它。一旦过期,任何人都可以用同一个 slug 创建模拟接口,所以请在到期前续期,并把管理令牌放在你找得到的地方。
  • 指望以后能改名。slug 在创建时就固定了,用 PUT 更新模拟接口不会改变它。想换地址,就创建一个新的模拟接口,再删除旧的。

何时使用此功能

随机 slug 在每次重建时都会变化,所有保存了该 URL 的配置都会随之失效。长度为 4 到 48 个字符的自定义 slug 能给模拟接口一个固定、可读的地址,你可以放心写进环境变量、CI 密钥和同事的配置里。

创建模拟

curl -X POST https://quickmock.dev/api/mocks \
  -H 'Content-Type: application/json' \
  -d '{
  "slug": "my-app-payments-dev",
  "method": "GET",
  "response_status": 200,
  "content_type": "application/json",
  "response_body": "{\"status\":\"ok\"}"
}'

调用它

curl https://quickmock.dev/m/<slug>

您将获得什么

GET /m/my-app-payments-dev -> 200 {"status":"ok"}
second create with the same slug -> 409 slug_taken
(until the first mock is deleted or expires)

常见问题解答

如果 slug 已被占用会怎样?
POST /api/mocks 会返回 409,错误码为 slug_taken,并且不会创建任何东西。只要占用它的模拟接口还在运行,这个 slug 就不可用;一旦那个模拟接口被删除或过期,它立刻重新可用。因其他原因无法使用的名字也会返回同一个错误码,所以只需把它理解为:换一个 slug。
自定义 slug 会让模拟接口变成公开的吗?
不会比以前更公开,但可读的 slug 比随机的更容易被猜到,猜到 URL 的人就能调用它,所以别把机密放进响应里。请求日志默认依然是私有的:只有凭管理令牌才能打开,除非你创建模拟接口时设置了 logs_public。
以后可以修改 slug 吗?
不可以。slug 在创建模拟接口时就已确定,用 PUT 更新模拟接口时它会被忽略。想换到另一个地址,请用新 slug 创建一个新的模拟接口,让调用方指向它,然后删除旧的。

构建您自己的模拟

创建模拟

相关指南

← 所有指南

最后更新: 2026-10-20