po co używać Retrofit, skoro mamy OkHttp

107

za pomocą OkHttp możemy wykonać żądanie HTTP, a następnie uzyskać odpowiedź z serwera

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

następnie za pomocą Gson lib przekonwertuj odpowiedź na potrzebny nam obiekt.

to jest z Square / OkHttp doc:

Jego API żądań / odpowiedzi zostało zaprojektowane z płynnymi konstruktorami i niezmiennością. Obsługuje zarówno synchroniczne wywołania blokujące, jak i wywołania asynchroniczne z wywołaniami zwrotnymi

Czytałem ze stackOverFlow

Retrofit automatycznie używa OkHTTP, jeśli jest dostępny

.

Więc moje pytanie brzmi: do czego dokładnie służy Retrofit?

co Retrofit może zrobić, czego OkHttp nie może ?!

Myślę, że OkHttp i Gson rozwiązują problem API żądania, więc jaki problem Retrofit rozwiązuje dla nas?

Mehrdad Faraji
źródło
2
Oparty na opinii i jako taki prawdopodobnie zostanie zamknięty jako taki. Faktem jest, że zarówno istnieją, jak i nikt nie umarł. Co oznacza, że ​​oba mają ważne przypadki użycia w oczach społeczności programistów Androida.
fge
1
Sprawdź ten post stackoverflow.com/q/16902716/1144203
ivan.sim
@isim Widziałem już ten link, ale nie rozumiem, dlaczego potrzebuję modernizacji ?! i dlaczego Retrofit używa OkHttp!
Mehrdad Faraji
@MehrdadFaraji Nie potrzebujesz modernizacji, jeśli OkHttp może robić, co chcesz. Po co Retrofit używać OkHttp Kilka rzeczy, takich jak włączenie Callwzorca OkHttp, przechwytywacza OkHttp, przypinanie certyfikatu itp.
ivan.sim
używanie retrofitu z rxjava stało się powszechną praktyką branżową, co jest kolejnym powodem do korzystania z retrofitu
paul_hundal

Odpowiedzi:

95

za pomocą OkHttp możemy wykonać żądanie HTTP, a następnie uzyskać odpowiedź z serwera ... następnie za pomocą Gson lib przekonwertować odpowiedź na potrzebny obiekt

Zwróć uwagę, że we fragmencie kodu pominięto dwa istotne kroki: wygenerowanie adresu URL i faktyczne przeanalizowanie kodu JSON za pomocą Gson.

Więc moje pytanie brzmi: do czego dokładnie służy Retrofit?

Służy do generowania adresu URL (przy użyciu wygenerowanego kodu uwzględniającego typ, powiązanego z określonym interfejsem API REST) ​​i faktycznego analizowania kodu JSON przy użyciu Gson. Innymi słowy, robi to, co pominęło się we fragmencie kodu.

Ponadto w przypadku niektórych typów operacji REST (np. POST) pomaga nieco w asemblacji tego, co należy przesłać (np. Generowanie zakodowanego formularza).

Z definicji nie musisz korzystać z funkcji Retrofit. Retrofit to kod komputerowy napisany przez programistów komputerowych. Ktoś inny mógłby napisać kod, który robi to, co robi Retrofit.

dlaczego Retrofit używa OkHttp

Retrofit musi wykonywać operacje HTTP. Używa OkHttp, jeśli jest dostępny, dla wszystkiego, co zapewnia OkHttp: obsługa HTTP / 2 i SPDY, podłączane przechwytywacze itp.

CommonsWare
źródło
32

Powinieneś użyć modernizacji, jeśli próbujesz zmapować interfejs API serwera w aplikacji (zabezpieczanie typów). Retrofit to po prostu adapter API opakowany w okHTTP.

Jeśli chcesz bezpiecznie i modularyzować kod interakcji za pomocą interfejsu API, użyj modernizacji. Poza tym podstawowa wydajność, domyślne ustawienia żądań itp. OkHTTP i Retrofit są takie same.

Poleciłbym również posłuchać tego podcastu Jesse Wilsona (twórcy głównych klientów HTTP dla Androida), w którym szczegółowo omawia historię rozwoju klienta HTTP Apache, HTTPURLConnection, okHTTP i Retrofit.

geekoraul
źródło
23

Retrofit vs. OkHttp Powód jest prosty : OkHttp to czysty klient HTTP / SPDY odpowiedzialny za wszelkie operacje sieciowe niskiego poziomu, buforowanie, manipulację żądaniami i odpowiedziami i wiele innych. W przeciwieństwie do tego Retrofit to wysokopoziomowa abstrakcja REST oparta na OkHttp. Retrofit 2 jest silnie powiązany z OkHttp i intensywnie z niego korzysta.

Funkcje OkHttp: pule połączeń, gzipowanie, buforowanie, odzyskiwanie po problemach z siecią, synchronizacja i wywołania asynchroniczne, przekierowania, ponowienia… i tak dalej.

Funkcje modernizacji: manipulacja adresem URL, żądanie, ładowanie, buforowanie, wątkowanie, synchronizacja ... Umożliwia synchronizację i wywołania asynchroniczne.

Wubbalubbadubdub
źródło
7

Retrofit to klient REST dla Androida i Java firmy Square. Ułatwia to stosunkowo łatwe pobieranie i przesyłanie JSON (lub innych danych strukturalnych) za pośrednictwem usługi sieci Web opartej na REST. W opcji Retrofit można skonfigurować konwerter używany do serializacji danych. Zwykle w przypadku formatu JSON używasz GSon, ale możesz dodać niestandardowe konwertery do przetwarzania XML lub innych protokołów. Retrofit używa biblioteki OkHttp do żądań HTTP. Powinieneś użyć modernizacji ponad okhttp ze względu na jego łatwość i funkcje.

Malti Devnani
źródło