Como fazer requisição HTTP no Android com OkHttp: guia para consumir APIs

Ao desenvolver aplicativos Android, uma das necessidades mais comuns é consumir APIs através de requisições HTTP, utilizando bibliotecas como OkHttp para integrar dados externos.
Este artigo mostra passo a passo como fazer requisições com OkHttp no Android, respondendo dúvidas como: qual é a melhor biblioteca para requisição, como enviar JSON no Android com OkHttp, e quando usar OkHttp ou Retrofit.
public class WebClient {
// métodos para comunicação com servidor
}
Até o Android 5.0 (API 22), era possível utilizar a biblioteca Apache HttpClient. A partir do Android 6.0 (API 23), o Apache HttpClient foi removido do Android SDK. Desde então, o Google recomenda usar HttpURLConnection ou bibliotecas modernas como OkHttp.
public class WebClient {
public String post(String json) throws IOException {
URL url = new URL("http://www.umsitequalquer.com.br/fazPost");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-type", "application/json"); connection.setRequestProperty("Accept", "application/json");
connection.setDoOutput(true);
PrintStream printStream = new PrintStream(connection.getOutputStream()); printStream.println(json);
connection.connect();
String jsonDeResposta = new Scanner(connection.getInputStream()).next();
return jsonDeResposta; }
public String get() throws IOException {
URL url = new URL("http://www.umsitequalquer.com.br/fazGet");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/json");
connection.connect();
String jsonDeResposta = new Scanner(connection.getInputStream()).next();
return jsonDeResposta; }
}Normalmente, a nossa classe WebClient terá uma estrutura semelhante a essa, podendo conter mais métodos para outros tipos de requisição. Apesar de funcionar, o código fica muito verboso e repetitivo. Felizmente, existe uma maneira de simplificar esse processo, que exploraremos a seguir.
Por que escolher OkHttp para chamadas de API no Android? Hoje, entre as opções modernas, OkHttp se destaca por sua simplicidade e performance, além de funcionar tanto para projetos em Java quanto para requisições HTTP em Kotlin.
Para adicioná-la ao projeto, é necessário registrá-la no arquivo build.gradle:
dependencies { compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.squareup.okhttp3:okhttp:5.4.0' } O OkHttp oferece métodos fáceis para fazer requisição GET e POST no Android, e pode ser integrado facilmente ao Kotlin e com coroutines para chamadas assíncronas altamente performáticas.
public class WebClient {
public String post(String json) throws IOException {
OkHttpClient client = new OkHttpClient(); // restante do código
}
}Para realizar a requisição ao servidor, utilizamos o método newCall(), que, quando executado, retorna a resposta do servidor:
public class WebClient {
public String post(String json) throws IOException {
OkHttpClient client = new OkHttpClient(); Response response = client.newCall().execute();
// restante do código
}
}No exemplo acima, ainda não definimos qual tipo de requisição será realizada. Por isso, é necessário criar uma requisição personalizada:
public class WebClient {
public String post(String json) throws IOException {
OkHttpClient client = new OkHttpClient();
String url = "http://www.umsitequalquer.com.br/fazPost";
Request.Builder builder = new Request.Builder();
builder.url(url);
MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); RequestBody body = RequestBody.create(mediaType, json); builder.post(body); // Exemplo de como enviar JSON com OkHttp no Android
Request request = builder.build();
Response response = client.newCall(request).execute();
// restante do código
} }Como visto no código, criar uma requisição manualmente pode ser trabalhoso. Por isso, utilizamos um Builder, que facilita o envio das informações necessárias, como a URL.
Para definir o corpo do POST, usamos o objeto RequestBody, criado através do método estático create, que recebe o tipo de conteúdo (definido em MediaType) e os dados que serão enviados no corpo da requisição.
Agora com o corpo da requisição pronto, temos que informar ao nosso Builder que nossa requisição será um POST, passando o corpo da requisição. Com isso pronto, basta criarmos a requisição, atráves do método build().
Feito tudo isso, falta agora pegarmos o corpo da resposta e devolver como resposta do nosso método, igual fazíamos antes :
public class WebClient {
public String post(String json) throws IOException {
OkHttpClient client = new OkHttpClient();
String url = "http://www.umsitequalquer.com.br/fazPost";
Request.Builder builder = new Request.Builder();
builder.url(url);
MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); RequestBody body = RequestBody.create(mediaType, json); builder.post(body);
Request request = builder.build();
Response response = client.newCall(request).execute();
String jsonDeResposta = response.body().string(); return jsonDeResposta;
} }Para pegarmos o corpo da resposta, temos o método body(), que retorna um ResponseBody e para transformarmos ele em String usamos o método string(). Desta forma, o nosso POST está terminado, ficou faltando fazermos o GET :
public String get() throws IOException {
String url = "http://www.umsitequalquer.com.br/fazGet";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
String jsonDeResposta = response.body().string();
return jsonDeResposta; }Como podemos ver, não muda praticamente nada do que fizemos anteriormente, exceto por não termos que falar que estamos fazendo um GET, pois já é definido por padrão.
Qual você prefere, a utilização da biblioteca nativa do Java ou usar a biblioteca OkHttp ? Vimos aqui como utilizar a biblioteca do OkHttp 3 para facilitar nossas requisições, evitando muito código e de leitura bem mais simples !
Quer saber mais sobre Android ? Aqui no Alura temos alguns cursos bem bacanas, confere clicando aqui !
Avalie este artigo
✨ Agradecemos pela sua avaliação! ✨








