Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Consumindo API's Rest com Retrofit 2
Search
Felipe Arimateia
March 21, 2017
Technology
0
24
Consumindo API's Rest com Retrofit 2
Talk apresenta no Android Meetup BH - Droid Talks S02E03.
#retrofit #android
Felipe Arimateia
March 21, 2017
Tweet
Share
More Decks by Felipe Arimateia
See All by Felipe Arimateia
Compartilhando e acelerando com módulos em aplicações Android v2
felipearimateia
1
160
Compartilhando e acelerando com módulos em aplicações Android
felipearimateia
2
43
Firebase além do chat
felipearimateia
0
79
Firebase ML Kit: Educando com Machine Learning
felipearimateia
0
23
Monetizando suas aplicações: O que pode e o que não pode, e como fazer
felipearimateia
0
25
Testes de UI legíveis e sustentáveis para Android
felipearimateia
0
19
Cloud Functions para Firebase
felipearimateia
1
33
Construindo Aplicações Android com Firebase
felipearimateia
1
68
Firebase: dando um Up na sua aplicação.
felipearimateia
0
110
Other Decks in Technology
See All in Technology
[Ruby] Develop a Morse Code Learning Gem & Beep from Strings
oguressive
1
200
非機能品質を作り込むための実践アーキテクチャ
knih
5
1.7k
Storage Browser for Amazon S3
miu_crescent
1
300
型情報を用いたLintでコード品質を向上させる
sansantech
PRO
2
150
Server-Side Engineer of LINE Sukimani
lycorp_recruit_jp
0
390
LINEスキマニにおけるフロントエンド開発
lycorptech_jp
PRO
0
340
AWS環境におけるランサムウェア攻撃対策の設計
nrinetcom
PRO
0
190
Wantedly での Datadog 活用事例
bgpat
2
730
Unlearn Product Development - Unleashed Edition
lemiorhan
PRO
2
120
podman_update_2024-12
orimanabu
1
290
20241218_今年はSLI/SLOの導入を頑張ってました!
zepprix
0
190
能動的ドメイン名ライフサイクル管理のすゝめ / Practice on Active Domain Name Lifecycle Management
nttcom
0
260
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
Unsuck your backbone
ammeep
669
57k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Gamification - CAS2011
davidbonilla
80
5.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Designing for humans not robots
tammielis
250
25k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Music & Morning Musume
bryan
46
6.2k
Transcript
Consumindo API's Rest com Retrofit 2
hello! Felipe Arimateia Software Engineer na CI&T e amante de
séries.
1. Retrofit Retrofit é uma biblioteca segura para consumir API's
REST em Android ou Java desenvolvida pela Square.
“ Uma das principais funcionalidades do Retrofit é abstrair a
complexidade de se criar e gerenciar conexões para API's.
2. OKHTTP OkHttp é uma biblioteca desenvolvida pela Square para
realizar requisições HTTP.
“ OkHttp foi construído por cima da biblioteca Okio, que
tenta ser mais eficiente que as bibliotecas de I/O padrão do Java, criando um pool de memória compartilhada.
Exemplo https://github.com/androidbh/a ndroid_feedwrangler_example
Setup dependencies { compile 'com.squareup.retrofit2:retrofit:2.2.0' compile 'com.squareup.retrofit2:converter-gson:2.2.0' }
Converters Converter Library Gson com.squareup.retrofit2:converter-gson Jackson com.squareup.retrofit2:converter-jackson Moshi com.squareup.retrofit2:converter-moshi Protobuf
com.squareup.retrofit2:converter-protobuf Wire com.squareup.retrofit2:converter-wire Simple XML com.squareup.retrofit2:converter-simplexml
Retrofit instance Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://feedwrangler.net/") .build(); FeedWranglerApi
api = retrofit.create(FeedWranglerApi.class);
Endpoints public interface FeedWranglerApi { @GET("api/v2/podcasts/categories") Call<ResponseApi<Category>> getCategories(); @GET("api/v2/podcasts/category/{id}") Call<ResponseApi<Podcast>>getCategory(@Path("id")
int id); @GET("api/v2/podcasts/search") Call<ResponseApi<Podcast>>search(@Query("search_term") String term); }
Endpoints public interface FeedWranglerApi { @POST("api/v2/users/authorize") Call<ResponseApi<User>> authorize(@Body User user);
}
Annotations Annotation Descrição @Path Adiciona paths no final do endpoint
@Query Adiciona queries na requisição @Body Defini o payload para requisições POST @Header Adiciona cabeçalhos na requisição
Executando Call<ResponseApi<Category>> call = api.getCategories(); call.enqueue(new Callback<ResponseApi<Category>>() { @Override public
void onResponse(Call<ResponseApi<Category>> call, Response<ResponseApi<Category>> response) { ResponseApi responseApi = response.body(); //... } @Override public void onFailure(Call<ResponseApi<Category>> call, Throwable t) {} });
Cancelando call.enqueue(new Callback<ResponseApi<Category>>() { @Override public void onResponse(Call<ResponseApi<Category>> call, Response<ResponseApi<Category>>
response) { if (response.isSuccessful()) {//...} } @Override public void onFailure(Call<ResponseApi<Category>> call, Throwable t) { if (call.isCanceled()) { Log.d(TAG, "requisição cancelada");} } }); call.cancel();
Error Object { error = "Not authorized"; result = "error";
}
Simples Error Handler public static ResponseApi parseError(Response<?> response) { Converter<ResponseBody,
ResponseApi> converter = RestAdpter.retrofit() .responseBodyConverter(ResponseApi.class, new Annotation[0]); ResponseApi error; try { error = converter.convert(response.errorBody()); } catch (IOException e) {return new ResponseApi();} return error; }
Tratando error call.enqueue(new Callback<ResponseApi<Podcast>>() { @Override public void onResponse(Call<ResponseApi<Podcast>> call,
Response<ResponseApi<Podcast>> response) { if (response.isSuccessful()) {//...} else { ResponseApi responseApi = ErrorUtils.parseError(response); showMessage(responseApi.getError()); } } @Override public void onFailure(Call<ResponseApi<Podcast>> call, Throwable t) {} }
Interceptor OkHttpClient.Builder builder = new OkHttpClient.Builder(); HttpLoggingInterceptor httpLoggingInterceptor = new
HttpLoggingInterceptor(); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); builder.networkInterceptors().add(httpLoggingInterceptor); builder.build(); Retrofit retrofit = new Retrofit.Builder() .client(okHttpClient) https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor
Interceptor return new Interceptor() { @Override public Response intercept(Chain chain)
throws IOException { Request request = chain.request(); HttpUrl url = request.url().newBuilder() .addQueryParameter("client_key", BuildConfig.CLIENT_KEY) .build(); request = request.newBuilder().url(url).build(); return chain.proceed(request); } };
Logging (Stetho) OkHttpClient client = new OkHttpClient.Builder() .addNetworkInterceptor(new StethoInterceptor()) .build();
dependencies { compile 'com.facebook.stetho:stetho:1.4.2' compile 'com.facebook.stetho:stetho-okhttp3:1.4.2' }
Interceptor Sabe quando o desenvolvedor do backend fala que o
problema de lentidão está no aplicativo? Prove para ele que não, criando um interceptor para calcular o tempo que cada requisção demora. Veja aqui um exemplo, de um interceptor que manda dados da requisição para o Answers do Fabric.
thanks! Any questions? You can find me at @twiterdoari