在 Android 上测试 API:口袋里的完整 REST、GraphQL 与 WebSocket 客户端
在你的 Android 手机上测试和调试 REST、WebSocket、GraphQL 与 SSE API。 PocketCode 内置 HTTP 客户端——认证、脚本、环境、Mock Server 与代码生成——全部集成在 IDE 中。
更新,2026 年 9 月: API Tester 现在还有 Socket.IO 和 MQTT,并用一个真正的沙盒 JavaScript 引擎取代了旧的测试模拟器。查看 新增内容。代码里还有一个 gRPC 面板, 但当前版本把它隐藏了,等它能在 Android 上运行后再放出来。
API 总在最糟糕的时刻出问题:你不在电脑前,webhook 没有触发,而装着 Postman 的 笔记本又在家里。在 Android 上,通常的答案是"等回去再说"。PocketCode 消除了这段 等待——它内置了一个 HTTP 客户端,让你无需第二个应用、也不用写一行胶水 代码,就能在手机上测试和调试 REST API。
它就在你的编辑器、终端和数据库管理器旁边,覆盖调用 API 的日常 工作:构建请求、读取响应、保存集合和变量,外加几个进阶工具。哪里缺失或有限制, 本文都会直说。
它究竟能做什么

API Tester 有六种协议,从请求上下文行的下拉菜单中选择:
| 协议 | 用途 |
|---|---|
| REST (HTTP) | 经典的请求/响应客户端——8 种方法 |
| WebSocket | 实时双向文本消息(ws:// / wss://) |
| GraphQL | 查询与变更 + schema 内省 |
| SSE | 实时的 Server-Sent Events 流 |
| Socket.IO | 通过官方客户端监听和发送命名事件 |
| MQTT | 按 topic 订阅和发布,QoS 0/1/2,可选是否使用 TLS(MQTT 5) |
对于 REST,它覆盖全部八种 HTTP 方法——GET、POST、PUT、PATCH、DELETE、HEAD、 OPTIONS 和 TRACE——每种都有专属配色,让你一眼扫过一个集合就能识别。
未加密的 http:// 和 ws:// 只能连接 localhost、127.0.0.1 和 10.0.2.2;
其余都需要 HTTPS。局域网里 http://192.168.x.x 上的服务器会被拦截,请改用 HTTPS
或隧道。
构建一个请求
请求编辑器由一个 URL 栏、一行显示协议与环境的上下文行,以及作为标签行的各个区块组成:
- URL 栏 —— 方法选择器、一个等宽字体的 URL 输入框,以及一个发送按钮,请求 进行中时它会变成取消按钮。
- Params —— 一个键/值编辑器,每一行都有启用/禁用的复选框和一个活动数量徽章, 这样你可以在不删除查询参数的情况下切换它们。
- Headers —— 同样的键/值编辑器,支持批量编辑(粘贴
Key: value行)以及 逐行的密钥标记。每个新请求都自带一个Content-Type: application/json请求头。 - Body —— 十种 body 类型:JSON(带美化 / 压缩)、Form URL-Encoded、 Multipart(每个字段可选 TEXT 或 FILE,配有文件选择器)、Raw、XML、HTML、 JavaScript、Binary(发送原始文件)和 GraphQL。
- Settings —— 超时、跟随重定向和 SSL 验证。
在 REST 请求中,你可以在 URL、参数、请求头、body 或认证里放入一个
{{variable}},它会在发送时被插值替换(下面会详细说明)。GraphQL 查询以及
WebSocket、SSE、Socket.IO 和 MQTT 面板不会替换变量。
认证
PocketCode 列出了十种认证类型,其中八种可用,分为常用卡片和一个高级区块:
- 常用: None、Bearer(token + 自定义前缀)、Basic、API Key (可选放在 Header 或 Query Param 中)。
- 高级: OAuth2、Digest(用户名和密码,其余由服务器的 401 质询提供)、 AWS Signature v4(access key、secret、region、service、session token)、 以及一个完全自定义的请求头。Hawk 和 NTLM 也在列表中,标注为即将推出,目前不起任何作用。
OAuth2 显示四种授权卡片,但只有两种会替你获取 token:Client Credentials
(Get token 按钮)和 Authorization Code(应用打开浏览器,你手动粘贴返回的
code,再点 Exchange code)。Password 和 Implicit 需要你自己粘贴 access
token。token 始终以 Authorization: Bearer 发送。没有 PKCE,也没有 refresh token。
脚本与测试
每个请求前后会运行两类检查:
- 无代码断言——选择一个字段(状态码、响应时间、某个请求头、body 内的 JSONPath、body 大小)、一个运算符和一个期望值。它们总会被评估。
- JavaScript 脚本——**预请求脚本(pre-request script)**在发送之前运行,
**测试脚本(test script)**在收到响应之后运行。它们在隔离的引擎中运行,只暴露
pm.*的一个小子集:pm.test、pm.expect、pm.environment、pm.globals(只读)、pm.request(只读),以及在测试中可用的pm.response。没有pm.sendRequest、pm.variables或setNextRequest,脚本也不能修改请求。使用这些调用的 Postman 脚本会在控制台中报脚本错误。在没有现代 WebView 的设备上,脚本不会运行,只有断言会运行。
有九个现成断言的菜单:status is 200、status is 2xx、response time < 500 ms、 has JSON body、body not empty、has Content-Type header、body contains string、array length > 0,以及一个 JSON schema valid,它实际上只检查 body 是否为 JSON。Console 标签页会以 LOG / INFO / WARN / ERROR 级别记录脚本输出的所有内容以及各个请求, 覆盖整个会话。
读取响应
响应面板在顶部给出最重要的数字——状态码(按范围配色)、以毫秒计的总耗时、body 大小和内容类型。下方是各个标签页:
| 标签页 | 你能看到什么 |
|---|---|
| Body | Pretty(可折叠的 JSON 树,带按键过滤和 JSONPath 过滤;其他内容按原样显示)、Raw,以及 Preview(仅 HTML,关闭 JavaScript) |
| Headers | 一个便于复制的表格 |
| Cookies | 带有 Secure / HttpOnly 徽章的行 |
| Tests | 无代码断言和 JavaScript 测试脚本两者的结果 |
| Timeline | DNS · TCP · TLS · TTFB · 传输 |
| Console | 脚本记录的一切内容,按 LOG / INFO / WARN / ERROR 级别 |
你可以复制 body 和每个请求头,并把 JSON 树中的任意值保存为变量。响应没有分享或保存功能, 也没有带高亮匹配项的文本搜索。
超越 REST
- WebSocket 连接到
ws://或wss://URL,显示连接状态,并以聊天式日志显示已发送和已接收的文本消息。 没有自定义握手请求头、子协议、自动重连或已保存的消息模板,二进制帧也不会显示。 - GraphQL 提供一个带 JSON 变量的查询编辑器、一个运行内省的 Fetch Schema 按钮,以及一个查看类型和字段(附参数个数)的 schema 浏览器。 操作以 HTTP POST 发出:没有操作名字段,没有订阅,面板也没有自己的认证或请求头。
- SSE 流会进入一个实时事件日志(type、id 和 data 的前 300 个字符)。
没有自定义请求头、类型过滤或自动重连,服务器发来的
retry会被忽略。 - gRPC 在代码里,但当前版本把它隐藏了:它的面板需要应用没有带上的一个库, 所以在它能在 Android 上运行之前,协议菜单里不会出现它。
- Socket.IO 连接到一个命名空间,可开启自动重连。为命名事件添加监听器,并用 JSON 负载发送自己的事件——聊天式日志中的每条消息都会标注其事件名。没有自定义 请求头、auth 或 query 参数,监听器也无法移除。
- MQTT 仅支持 MQTT 5(只支持 3.1.1 的 broker 可能拒绝连接)。可选是否使用 TLS、 是否使用用户名/密码进行连接,按 QoS 0、1 或 2 订阅 topic,以 QoS 发布 (没有 retain 选项),消息按 topic 分组显示。没有取消订阅、遗嘱消息或自定义证书。
保持井然有序
- **集合(Collections)**保存请求,支持按名称搜索、导出和删除,以及点击一下即可把任意请求 重新载入编辑器。文件夹随导入而来,执行器可以遍历它们,但你无法在列表中创建或打开文件夹, 也不能重命名集合或其中的请求。从编辑器保存的请求都叫 "New Request"。Free 套餐只保留一个集合。
- **历史(History)**最多保存 200 条记录,可按 URL 或名称搜索,按"仅加星标" 或 GET / POST / PUT / DELETE 筛选,并按今天 / 昨天 / 本周 / 更早分组。可为记录加星、载入、 与另一个响应比较,或把它变成 mock 路由。在 Free 套餐中,历史记录满 10 条后就不再保存,直到你清空为止。
- **环境(Environments)**管理
{{variable}}集合,另有一个全局变量区。用锁图标把变量标记为密钥: 它在屏幕上会被遮盖,在生成的 cURL 和代码中保留为{{name}}占位符。解析顺序从最具体到最通用:先是像{{$guid}}这样的动态变量,然后是(若启用)执行器数据文件的当前行,接着是 Collection、Environment,最后是 Global。Free 套餐只保留一个环境。 - 一个持久化的 cookie jar 会从每个
Set-Cookie自动填充自身,并显示 Secure / HttpOnly 徽章。你无法手动添加 cookie。
强力工具

- 通过粘贴文本,从 cURL、Postman v2.1、Insomnia、OpenAPI 3.0 / Swagger(JSON 或 YAML)和 HAR 导入。可把集合导出为 Postman v2.1、Insomnia、OpenAPI 3.0、HAR 或 Markdown(复制到剪贴板), 也可把单个请求导出为 cURL。
- 代码生成器把当前请求转换为可直接粘贴的代码,共 27 个菜单项(其中两个都是 cURL,所以是 26 种不同输出)——cURL、HTTPie、Wget、Fetch、Axios、Python
requests、Java OkHttp、Swift URLSession、Gonet/http、PHP、Ruby、C#、Rust、Dart、PowerShell 等等——包含方法、URL、请求头和 body。只有 cURL 输出包含认证。 - 一个本地 Mock Server(Pro 套餐的一部分)会在设备上启动一个 HTTP 服务器
(默认端口 8090,仅限回环:本设备可访问,网络中不可访问),每条路由定义一个方法、
路径模式(
/users/:id)、状态和 body,另有一个全局延迟——并配有一份实时的传入调用日志。 路由不会在会话之间保存。 - **集合执行器(Collection Runner)和负载测试(Load Test)**同样属于 Pro。执行器按顺序遍历一个集合, 迭代 1 到 100 次,或让 CSV / JSON 数据文件的每一行对应一次迭代。负载测试逐个依次发送请求; 它的并发和爬坡字段目前没有效果。
你的数据留在设备上
集合、历史、环境和 cookie 都存储在你手机上的本地数据库中,你发出的请求会直接发往你指定的服务器。 Cloud Sync 默认关闭;如果你开启它(Pro),它会同步你的设置、代码片段等数据, 但 API 集合和环境目前不会同步。在开发时,你可以为自签名证书关闭 SSL 验证。 而且因为它是 IDE 的一部分,当你向 AI 助手询问你的 API 时,它可以发送请求、列出你的集合或导入 cURL 命令。
测试一个 API 曾经意味着"回到电脑前"。现在不再如此。PocketCode 把一个 HTTP 客户端——六种协议,从 REST 到 MQTT——放进了你编写并发布代码的同一个 应用里。
PocketCode 已在 Google Play 上架。获取 PocketCode,在你自己的设备上试用它。
API 测试器