跳转到内容
返回首页
Tutorial

在 Android 上测试 API:口袋里的完整 REST、GraphQL 与 WebSocket 客户端

在你的 Android 手机上测试和调试 REST、WebSocket、GraphQL 与 SSE API。 PocketCode 内置 HTTP 客户端——认证、脚本、环境、Mock Server 与代码生成——全部集成在 IDE 中。

更新于:
4 min
作者 Pelayo Naredo
在 Android 上测试 API:口袋里的完整 REST、GraphQL 与 WebSocket 客户端

更新,2026 年 9 月: API Tester 现在还有 Socket.IO 和 MQTT,并用一个真正的沙盒 JavaScript 引擎取代了旧的测试模拟器。查看 新增内容。代码里还有一个 gRPC 面板, 但当前版本把它隐藏了,等它能在 Android 上运行后再放出来。

API 总在最糟糕的时刻出问题:你不在电脑前,webhook 没有触发,而装着 Postman 的 笔记本又在家里。在 Android 上,通常的答案是"等回去再说"。PocketCode 消除了这段 等待——它内置了一个 HTTP 客户端,让你无需第二个应用、也不用写一行胶水 代码,就能在手机上测试和调试 REST API。

它就在你的编辑器、终端和数据库管理器旁边,覆盖调用 API 的日常 工作:构建请求、读取响应、保存集合和变量,外加几个进阶工具。哪里缺失或有限制, 本文都会直说。

它究竟能做什么

API Tester:对 api.github.com 的 GET 请求在 309 毫秒内返回 200,JSON 响应以可折叠树状显示

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 大小和内容类型。下方是各个标签页:

标签页你能看到什么
BodyPretty(可折叠的 JSON 树,带按键过滤和 JSONPath 过滤;其他内容按原样显示)、Raw,以及 Preview(仅 HTML,关闭 JavaScript)
Headers一个便于复制的表格
Cookies带有 Secure / HttpOnly 徽章的行
Tests无代码断言和 JavaScript 测试脚本两者的结果
TimelineDNS · 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。

强力工具

工具面板:环境、模拟服务器、Cookies、导入与设置,每项都显示当前状态

  • 通过粘贴文本,从 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、Go net/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 测试器

关于这个的快速解答

准备好试用 PocketCode 了吗?

下载应用,开始用手机编程。