Pular para o conteúdo
Voltar ao início
Tutorial

Testes de API no Android: um cliente completo de REST, GraphQL e WebSocket no seu bolso

Teste e depure APIs REST, WebSocket, GraphQL e SSE direto do seu celular Android. O PocketCode traz um cliente HTTP — autenticação, scripts, ambientes, mock server e geração de código — integrado à IDE.

Atualizado:
11 min
Por Pelayo Naredo
Testes de API no Android: um cliente completo de REST, GraphQL e WebSocket no seu bolso

Atualização, setembro de 2026: o API Tester agora também tem Socket.IO e MQTT, e substituiu seu antigo simulador de testes por um motor JavaScript real em sandbox. Veja as novidades. Há um painel gRPC no código também, mas a versão atual o oculta até que ele funcione no Android.

Uma API quebra no pior momento possível: você está longe da sua mesa, o webhook não está disparando e o seu notebook com o Postman ficou em casa. No Android, a resposta de sempre é "espere até voltar". O PocketCode elimina essa espera — ele traz um cliente HTTP integrado à IDE, para que você teste e depure APIs REST pelo celular sem um segundo aplicativo nem uma única linha de código de amarração.

Ele fica bem ao lado do seu editor, do terminal e do gerenciador de banco de dados, e cobre o trabalho do dia a dia de chamar uma API: montar uma requisição, ler a resposta, guardar coleções e variáveis, e algumas ferramentas extras. Onde algo falta ou tem limites, este artigo diz.

O que ele realmente faz

O API Tester: um GET para api.github.com respondido com 200 em 309 ms, e a resposta JSON como árvore recolhível

O API Tester tem seis protocolos, escolhidos num menu suspenso da linha de contexto da requisição:

ProtocoloPara que serve
REST (HTTP)O clássico cliente de requisição/resposta — 8 métodos
WebSocketMensagens de texto bidirecionais ao vivo (ws:// / wss://)
GraphQLQueries e mutations + introspecção de schema
SSEFluxos de Server-Sent Events em tempo real
Socket.IOOuça e emita eventos nomeados pelo cliente oficial
MQTTAssine e publique por topic, QoS 0/1/2, com ou sem TLS (MQTT 5)

Para REST, ele cobre todos os oito métodos HTTP — GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS e TRACE — cada um com uma cor própria, para que você identifique uma coleção num relance.

O http:// e o ws:// sem criptografia só funcionam para localhost, 127.0.0.1 e 10.0.2.2; todo o resto precisa de HTTPS. Um servidor da sua rede local em http://192.168.x.x é bloqueado: use HTTPS ou um túnel.

Montando uma requisição

O editor de requisições é organizado como uma barra de URL, uma linha de contexto com o protocolo e o ambiente, e as seções como uma fileira de abas:

  • Barra de URL — seletor de método, um campo de URL em fonte monoespaçada e um botão Send que vira Cancel enquanto a requisição está em andamento.
  • Params — um editor de chave/valor onde cada linha tem uma caixa de seleção para ativar/desativar e um selo com a contagem de itens ativos, para que você alterne os query params sem apagá-los.
  • Headers — o mesmo editor de chave/valor, com edição em bloco (cole linhas Key: value) e um indicador de segredo por linha. Um header Content-Type: application/json vem com cada requisição nova.
  • Body — dez tipos de corpo: JSON (com Beautify / Minify), Form URL-Encoded, Multipart (TEXT ou FILE por campo, com um seletor de arquivos), Raw, XML, HTML, JavaScript, Binary (enviar um arquivo bruto) e GraphQL.
  • Settings — timeout, seguir redirecionamentos e verificação SSL.

Em requisições REST dá para inserir uma {{variable}} na URL, nos params, nos headers, no body ou na auth, e ela é interpolada no momento do envio (mais sobre isso adiante). A query GraphQL e os painéis de WebSocket, SSE, Socket.IO e MQTT não substituem variáveis.

Autenticação

O PocketCode lista dez tipos de autenticação, e oito deles funcionam, divididos em cards comuns e uma seção avançada:

  • Comuns: None, Bearer (token + prefixo personalizado), Basic, API Key (com escolha entre Header ou Query Param).
  • Avançados: OAuth2, Digest (usuário e senha; o resto vem do desafio 401 do servidor), AWS Signature v4 (access key, secret, region, service, session token), e um header totalmente Custom. Hawk e NTLM também estão na lista, marcados como em breve, e ainda não fazem nada.

O OAuth2 mostra quatro cards de grant, mas só dois buscam o token para você: Client Credentials (botão Get token) e Authorization Code (o app abre o navegador, você cola à mão o code devolvido e toca em Exchange code). Em Password e Implicit você cola o access token. O token é sempre enviado como Authorization: Bearer. Não há PKCE nem refresh token.

Scripts e testes

Dois tipos de verificação rodam em torno de cada requisição:

  • Asserções sem código — escolha um campo (código de status, tempo de resposta, um header, um JSONPath dentro do corpo, tamanho do corpo), um operador e um valor esperado. São sempre avaliadas.
  • Scripts em JavaScript — um pre-request script roda antes do envio e um test script roda depois da resposta. Eles rodam num motor isolado e expõem um pequeno subconjunto de pm.*: pm.test, pm.expect, pm.environment, pm.globals (somente leitura), pm.request (somente leitura) e, nos testes, pm.response. Não existem pm.sendRequest, pm.variables nem setNextRequest, e um script não pode modificar a requisição. Um script do Postman que use essas chamadas falha com um erro de script no console. Num dispositivo sem um WebView moderno os scripts não rodam e só as asserções rodam.

Há um menu de nove asserções prontas: 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 e uma de JSON schema valid que, na prática, só verifica se o corpo é JSON. A aba Console registra tudo o que os scripts imprimem, e as requisições, nos níveis LOG / INFO / WARN / ERROR, de toda a sessão.

Lendo a resposta

O painel de resposta mostra no topo os números que importam — código de status (com uma cor por faixa), tempo total em milissegundos, tamanho do corpo e tipo de conteúdo. Abaixo disso, abas:

AbaO que você obtém
BodyPretty (uma árvore JSON recolhível com filtro por chave e por JSONPath; outros conteúdos aparecem como estão), Raw e Preview (só HTML, com JavaScript desligado)
HeadersUma tabela fácil de copiar
CookiesLinhas com selos Secure / HttpOnly
TestsResultados das asserções sem código e do script de teste em JavaScript
TimelineDNS · TCP · TLS · TTFB · transferência
ConsoleTudo o que o script registrou, nos níveis LOG / INFO / WARN / ERROR

Você pode copiar o corpo e cada header, e salvar qualquer valor da árvore JSON como variável. Não há Compartilhar nem Salvar da resposta, nem busca de texto com trechos destacados.

Além do REST

  • O WebSocket conecta a uma URL ws:// ou wss://, mostra o estado da conexão e um log em estilo de chat das mensagens de texto enviadas e recebidas. Não há headers de handshake personalizados, subprotocolos, reconexão automática nem templates salvos, e frames binários não são exibidos.
  • O GraphQL tem um editor de query com variáveis JSON, um botão Fetch Schema que executa introspecção e um explorador de schema para tipos e campos (com o número de argumentos). As operações saem como um POST HTTP: não há campo de nome de operação, nem subscriptions, nem auth ou headers próprios do painel.
  • Os fluxos SSE chegam a um log de eventos ao vivo (type, id e os primeiros 300 caracteres do data). Não há headers personalizados, filtro por tipo nem reconexão automática, e o retry do servidor é ignorado.
  • O gRPC está no código, mas oculto na versão atual: seu painel precisa de uma biblioteca que o app deixa de fora, então ele fica fora do menu de protocolo até funcionar no Android.
  • O Socket.IO conecta a um namespace, com uma alternância de reconexão automática. Adicione listeners para eventos nomeados e emita os seus com um payload JSON — cada mensagem no log estilo chat é marcada com o nome do seu evento. Não há headers, auth nem query personalizados, e os listeners não podem ser removidos.
  • O MQTT é só MQTT 5 (um broker que fale apenas 3.1.1 pode recusar a conexão). Conecta com ou sem TLS e com ou sem usuário/senha, assina topics com QoS 0, 1 ou 2, publica com QoS (não há opção de retain) e agrupa as mensagens por topic. Não há cancelar assinatura, last-will nem certificado próprio.

Mantendo tudo organizado

  • As Collections guardam requisições, com busca por nome, exportar e excluir, e um toque para carregar qualquer requisição de volta no editor. As pastas chegam com as importações e o Executor as percorre, mas você não pode criá-las nem abri-las pela lista, nem renomear uma coleção ou suas requisições. As requisições salvas pelo editor se chamam todas "New Request". O plano Free guarda uma coleção.
  • O History guarda até 200 entradas, pesquisável por URL ou nome, filtrável por "somente favoritas" ou por GET / POST / PUT / DELETE, e agrupado em Hoje / Ontem / Esta semana / Mais antigas. Favorite uma entrada, carregue-a, compare-a com outra resposta ou transforme-a em rota mock. No plano Free o histórico deixa de salvar após 10 entradas até você limpá-lo.
  • Os Environments gerenciam conjuntos de {{variable}}, mais uma seção de variáveis globais. Um cadeado marca uma variável como secreta: ela fica mascarada na tela e vira um marcador {{nome}} no cURL e no código gerados. A resolução vai do mais específico ao mais geral: primeiro qualquer variável dinâmica como {{$guid}}, depois uma linha do arquivo de dados do Executor se houver uma ativa, em seguida Collection, Environment e por fim Global. O plano Free guarda um ambiente.
  • Um cookie jar persistente se preenche a partir de cada Set-Cookie e exibe selos Secure / HttpOnly. Você não pode adicionar cookies à mão.

Ferramentas poderosas

A folha de Ferramentas: Ambientes, Mock Server, Cookies, Importar e Configurações, cada um com seu estado

  • Importe de cURL, Postman v2.1, Insomnia, OpenAPI 3.0 / Swagger (JSON ou YAML) e HAR colando o texto. Exporte uma coleção como Postman v2.1, Insomnia, OpenAPI 3.0, HAR ou Markdown (para a área de transferência), ou uma única requisição como cURL.
  • O Code Generator transforma a requisição atual em código pronto para colar em 27 entradas do menu (26 saídas distintas, porque duas são cURL) — cURL, HTTPie, Wget, Fetch, Axios, Python requests, Java OkHttp, Swift URLSession, Go net/http, PHP, Ruby, C#, Rust, Dart, PowerShell e mais — com método, URL, headers e body. Só a saída cURL inclui a auth.
  • Um Mock Server local (parte do plano Pro) sobe um servidor HTTP no dispositivo (porta padrão 8090, só loopback: acessível deste dispositivo, não pela rede), onde cada rota define um método, um padrão de caminho (/users/:id), status e body, mais um atraso global — com um log ao vivo das chamadas recebidas. As rotas não são guardadas entre sessões.
  • O Executor de coleções e o Teste de carga também são Pro. O Executor percorre uma coleção em ordem, de 1 a 100 iterações ou uma linha por iteração de um arquivo de dados CSV ou JSON. O teste de carga envia suas requisições uma após a outra; seus campos de concorrência e rampa ainda não têm efeito.

Seus dados ficam no dispositivo

Collections, history, environments e cookies são armazenados em um banco de dados local no seu celular, e as requisições que você envia vão direto ao servidor para o qual você aponta. O Cloud Sync vem desligado; se você o ativar (Pro), ele sincroniza suas configurações, snippets e outros dados, mas as coleções de API e os ambientes não são sincronizados por enquanto. Para desenvolvimento, você pode desativar a verificação SSL para certificados autoassinados. E, como faz parte da IDE, o assistente de IA consegue enviar uma requisição, listar suas coleções ou importar um comando cURL quando você lhe pergunta sobre suas APIs.


Testar uma API costumava significar "volte para o computador". Não mais. O PocketCode coloca um cliente HTTP — seis protocolos, do REST ao MQTT — no mesmo aplicativo em que você escreve e publica o código.

O PocketCode está disponível no Google Play. Baixe o PocketCode

A ferramenta por trás deste artigo

API Tester

Respostas rápidas sobre isso

Pronto para experimentar o PocketCode?

Baixe o app e comece a programar pelo seu celular.