por que usar Retrofit quando temos OkHttp

107

com OkHttp podemos fazer um pedido HTTP e obter a resposta do servidor

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url(url)
  .build();
Response response = client.newCall(request).execute();

então, com Gson lib converter a resposta para o objeto que precisamos.

este é do documento Square / OkHttp:

Sua API de solicitação / resposta foi projetada com construtores fluentes e imutabilidade. Ele suporta chamadas de bloqueio síncronas e chamadas assíncronas com retornos de chamada

Eu li de stackOverFlow

Retrofit usa OkHTTP automaticamente se disponível

.

Minha pergunta é para que serve exatamente o Retrofit?

o que o Retrofit pode fazer que o OkHttp não pode ?!

Acho que OkHttp e Gson resolvem o problema da API de solicitação, então que problema o Retrofit resolve para nós?

Mehrdad Faraji
fonte
2
Baseada em opinião e, como tal, provavelmente encerrada como tal. O fato é que ambos existem e nenhum morreu. O que significa que ambos têm casos de uso válidos aos olhos da comunidade de desenvolvedores Android.
fge
1
Confira esta postagem stackoverflow.com/q/16902716/1144203
ivan.sim
@isim Já vi este link antes, mas não consigo entender porque é necessário Retrofit ?! e por que o Retrofit usa o OkHttp!
Mehrdad Faraji
@MehrdadFaraji Você não precisa de Retrofit se OkHttp pode fazer o que você quer. Por que o retrofit usa o OkHttp Algumas coisas como habilitar o Callpadrão OkHttp, o interceptor OkHttp, a fixação de certificados etc.
ivan.sim
usar retrofit com rxjava se tornou uma prática comum da indústria, que é outro motivo para usar retrofit
paul_hundal 01 de

Respostas:

95

com OkHttp podemos fazer um pedido HTTP e obter a resposta do servidor ... então, com Gson lib converter a resposta para o objeto que precisamos

Observe que, em seu snippet de código, você ignorou duas etapas notáveis: gerar a URL e realmente analisar o JSON usando Gson.

Minha pergunta é para que serve exatamente o Retrofit?

É para gerar a URL (usando o código gerado com reconhecimento de tipo vinculado à sua API REST específica) e realmente analisar o JSON usando Gson. Em outras palavras, ele faz o que você ignorou em seu trecho de código.

Além disso, para certos tipos de operações REST (por exemplo, POST), isso ajuda um pouco na montagem do que enviar (por exemplo, gerar o formulário codificado).

Por definição, você não precisa usar Retrofit. Retrofit é um código de computador, escrito por programadores de computador. Outra pessoa poderia escrever código para fazer o que o Retrofit faz.

por que o Retrofit usa OkHttp

O retrofit precisa realizar operações HTTP. Ele usa OkHttp quando disponível, para tudo o que OkHttp fornece: suporte HTTP / 2 e SPDY, interceptores conectáveis, etc.

CommonsWare
fonte
32

Você deve usar o retrofit se estiver tentando mapear a API do seu servidor dentro do seu aplicativo (proteção de tipo). O retrofit é apenas um adaptador de API agrupado em okHTTP.

Se você deseja digitar com segurança e modularizar o código de interação com sua API, use o retrofit. Além disso, o desempenho subjacente, padrões de solicitação, etc de okHTTP e Retrofit são os mesmos.

Também recomendo ouvir este podcast de Jesse Wilson (desenvolvedor dos principais clientes HTTP Android), onde ele fala a fundo sobre a história de desenvolvimento do cliente Apache HTTP, HTTPURLConnection, okHTTP e Retrofit.

geekoraul
fonte
23

Retrofit vs. OkHttp O motivo é simples : OkHttp é um cliente HTTP / SPDY puro responsável por qualquer operação de rede de baixo nível, armazenamento em cache, manipulação de solicitação e resposta e muito mais. Em contraste, Retrofit é uma abstração REST de alto nível construída sobre OkHttp. O Retrofit 2 está fortemente acoplado ao OkHttp e faz uso intensivo dele.

Funções OkHttp: pool de conexão, gzip, cache, recuperação de problemas de rede, sincronização e chamadas assíncronas, redirecionamentos, novas tentativas ... e assim por diante.

Funções de Retrofit: Manipulação de URL, solicitação, carregamento, caching, threading, sincronização ... Permite sincronizar e fazer chamadas assíncronas.

Wubbalubbadubdub
fonte
7

Retrofit é um cliente REST para Android e Java da Square. Isso torna relativamente fácil recuperar e fazer upload de JSON (ou outros dados estruturados) por meio de um serviço da Web baseado em REST. No Retrofit, você configura qual conversor é usado para a serialização de dados. Normalmente, para JSON, você usa GSon, mas pode adicionar conversores personalizados para processar XML ou outros protocolos. O retrofit usa a biblioteca OkHttp para solicitações HTTP. Você deve usar retrofit em vez de okhttp por sua facilidade, por seus recursos.

Malti Devnani
fonte