API 参考
testingapis.com 是一个用于测试 HTTP 客户端的免费 API。它有 53 组共 360 个端点:既有商品、图书和国家等真实感资源,也有用于状态码、重定向、Cookie、缓存、认证方式、文件格式、流式传输和故障注入的端点。 Echo、HTTP 方法、状态码,以及 products、posts 和 todos 资源无需账号。其余端点需要一个免费账号。
https://api.testingapis.comfetch('https://api.testingapis.com/api/Products?limit=3')
.then(res => res.json())
.then(data => console.log(data))发现
| 内容 | 位置 |
|---|---|
| OpenAPI 3.0 文档 | https://api.testingapis.com/openapi/v1.json登录后查看 |
| Swagger UI | https://api.testingapis.com/swagger/index.html登录后查看 |
| 实时路由目录 | GET https://api.testingapis.com/api登录后查看 |
| 健康检查 | GET https://api.testingapis.com/api/healthGET https://api.testingapis.com/api/health/liveGET https://api.testingapis.com/api/health/ready |
| GraphQL | |
| WebSockets | wss://api.testingapis.com/ws/echowss://api.testingapis.com/ws/ticker |
认证
没有认证说明的端点是公开的。用于测试认证的端点接受下面这些固定的测试凭据,它们不是秘密。
| 方式 | 发送方式 | 测试值 | 使用的端点 |
|---|---|---|---|
| HTTP Basic | Authorization: Basic base64(user:pass) | apibee / password123 · Admin / Admin@1234(原始 API) | /api/auth/basic*, /api/AuthTest/secure-data |
| Bearer (static) | Authorization: Bearer <token> | apibee-token-123 · admin-token · user-token · readonly-token | /api/auth/bearer, /api/auth/roles/* |
| JWT | Authorization: Bearer <jwt> | 用 admin / admin123 或 user / user123 调用 POST /api/auth/jwt/login · 用 Michael / Thompson 调用 POST /api/User/Login | /api/auth/jwt/me, /api/auth/jwt/admin, /api/Admin/authorize |
| API key | X-API-Key 请求头、?api_key= 或 api_key Cookie | apibee-key-123 | /api/auth/api-key/* |
| OAuth 2.0 | Authorization: Bearer <access_token> | 客户端 apibee-client / apibee-secret 和 apibee-public(PKCE)· 用户 apibee / password123、jane / jane123 | /api/auth/oauth/protected, /userinfo |
| OAuth 1.0a | Authorization: OAuth oauth_consumer_key="…", oauth_signature="…", … | Consumer apibee-consumer-key / apibee-consumer-secret · 令牌 apibee-access-token / apibee-token-secret(永不过期)· HMAC-SHA1、HMAC-SHA256、HMAC-SHA512 或 PLAINTEXT | /api/auth/oauth1, /api/auth/oauth1/* |
| Digest | RFC 7616 质询与响应 | apibee / password123 | /api/auth/digest |
| HMAC 签名 | X-Timestamp 和 X-Signature 请求头 | 密钥 apibee-hmac-secret | /api/auth/hmac |
| 会话 Cookie | Cookie apibee_session | 用 test / test123 或 admin / admin123 调用 POST /api/cookies/login | /api/cookies/me |
| CSRF | XSRF-TOKEN Cookie 和 X-CSRF-Token 请求头 | 来自 GET /api/auth/csrf/token 的令牌 | /api/auth/csrf/submit |
401 表示凭据缺失或无效。403 表示凭据有效但不被允许,例如在 /api/auth/roles/admin 上使用 user-token。
示例用以下占位符表示每次运行都会变化的值:
| 占位符 | 获取方式 |
|---|---|
{{userJwt}} / {{adminJwt}} | 用 user / user123 或 admin / admin123 调用 POST /api/auth/jwt/login 得到的 accessToken。 |
{{refreshToken}} | POST /api/auth/jwt/login 返回的 refreshToken。 |
{{legacyJwt}} | 用 Michael / Thompson 调用 POST /api/User/Login 得到的 token(角色 Admin)。 |
{{oauthAccessToken}} | POST /api/auth/oauth/token 返回的 access_token。 |
{{oauth1RequestToken}} / {{oauth1RequestSecret}} / {{oauth1Verifier}} | 带 oauth_callback=oob 调用 POST /api/auth/oauth1/request_token 得到的 oauth_token 和 oauth_token_secret,再加上 GET /api/auth/oauth1/authorize 返回的 oauth_verifier。 |
{{csrfToken}} | GET /api/auth/csrf/token 返回的 token。同样的值也会设置为 XSRF-TOKEN Cookie。 |
{{sessionId}} | POST /api/cookies/login(test / test123)设置的 apibee_session Cookie。 |
{{unixTimestamp}} / {{hmacSignature}} | 当前的 Unix 时间(秒),以及用密钥 apibee-hmac-secret 对 "{timestamp}.{raw body}" 计算的十六进制 HMAC-SHA256。 |
{{uuid}} | 任意一个新的 UUID,用作 Idempotency-Key。 |
延迟与模拟错误
有两个查询参数适用于所有端点:
| 参数 | 作用 | 示例 |
|---|---|---|
delay | 等待 N 秒后再响应,最多 10 秒。 | /api/Products?delay=2 |
error | 返回模拟的错误而不是真实的响应:400、401、403、404、408、429、500、502 或 503。会加上 X-Simulated: true 响应头。 | /api/Products?error=503 |
组合使用时,例如 ?delay=2&error=503,请求会先等待再失败。模拟的错误如下:
{
"status": 503,
"error": "Service Unavailable",
"message": "Simulated error. Use ?error={code} to test different status codes.",
"simulated": true
}筛选、排序与分页
所有列出资源的端点(例如 GET /api/Products)都接受以下查询参数:
| 参数 | 含义 | 示例 |
|---|---|---|
limit | 每页条数,1 到 100。不传则返回全部记录。 | ?limit=10 |
page | 从 1 开始的页码,需要配合 limit。 | ?limit=10&page=2 |
offset | 跳过 N 条记录,可代替 page。 | ?limit=10&offset=20 |
sort, order | 按任意字段排序。order 为 asc(默认)或 desc。 | ?sort=price&order=desc |
q | 在 title、name、body、description 和 text 字段中不区分大小写地搜索。 | ?q=keyboard |
任意字段 | 对该属性做不区分大小写的精确筛选。 | ?category=books&inStock=true |
列表返回一个普通的 JSON 数组。总数在 X-Total-Count、X-Page、X-Per-Page 和 X-Total-Pages 响应头中。游标、Link 响应头、keyset 和 HAL 分页见分页。
响应与错误
| 情况 | 状态码 | 响应体 |
|---|---|---|
| 获取一条记录 | 200 | 该记录 |
| 列出记录 | 200 | 记录数组,加上分页响应头 |
| 创建 | 201 | { message, data } |
| 批量创建 | 201 | { message, data: [ … ] } |
| 替换或更新 | 200 | { message, data } |
| 部分更新(PATCH) | 200 | { message, changed, ignored, data } |
| 删除 | 200 | { message } |
| 批量删除 | 200 | { message, deleted, notFound } |
| 错误 | 4xx 或 5xx | { status, error, message } |
| 模型校验错误 | 400 | 带逐字段错误的 application/problem+json |
| 业务校验 | 422 | 带逐字段错误的 application/problem+json(RFC 7807) |
{
"status": 404,
"error": "Not Found",
"message": "Book with ID 999 does not exist."
}每个响应都允许任何来源(Access-Control-Allow-Origin: *,不带凭据),并向浏览器代码公开分页、缓存、限流和版本控制相关的响应头。X-RateLimit-* 响应头仅供参考;真正的限流只发生在限流端点上。
所有数据都保存在内存中。创建、更新和删除都可以,但服务器重启后一切都会恢复为初始数据。
在浏览器中调用
- Cookie。 浏览器不允许 JavaScript 设置 Cookie 请求头,跨域请求也不携带凭据。基于 Cookie 的端点只能在同源下或通过代理使用。
- 重定向。
fetch()会跟随重定向并隐藏 3xx 响应。要看到真实的状态码和 Location 响应头,请使用代理。 - 代理。
POST /api/Proxy/call从服务器转发请求,并返回其状态码和响应体。它能绕开 CORS、Cookie 和重定向的限制,但不会转发响应头。 - 流。
/api/stream/sse是 Server-Sent Events。NDJSON、chunked、drip 和 JSON 数组流会逐步到达,请用流式读取器读取。 - WebSocket。
/ws/echo和/ws/ticker需要使用 WebSocket API,而不是 fetch。 - Digest 认证。 浏览器只会通过自己的登录对话框完成质询与响应。
- 故障注入。
/api/chaos/abort和/api/chaos/partial会故意断开连接。/api/chaos/timeout和/api/chaos/slow最长可能需要 60 秒。 - 禁止的请求头。 浏览器拒绝设置 Host、Content-Length、Accept-Encoding、Cookie 等少数请求头。
端点
53 组共 360 个端点。每个分组都可打开其参考文档,包含参数以及请求和响应示例。
从这里开始
4 个端点所有端点的实时目录,加上健康检查。
HTTP 基础
44 个端点方法、状态码、重定向、Cookie、缓存和请求体。
格式与数据
62 个端点常见内容类型、文件下载、JSON 边界情况和实用工具。
认证与安全
38 个端点认证方式、OAuth 2.0 与 1.0a、JWT、限流和支付。
API 模式
50 个端点流式传输、WebSocket、异步任务、分页、故障注入等。
资源
142 个端点商品、帖子、图书和国家等真实感数据集。
原始 API
20 个端点API 的第一个版本:JSON 和 XML 用户、上传和认证测试。