Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Consumindo API's Rest com Retrofit 2
Search
Felipe Arimateia
March 21, 2017
Technology
40
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Consumindo API's Rest com Retrofit 2
Talk apresenta no Android Meetup BH - Droid Talks S02E03.
#retrofit #android
Felipe Arimateia
March 21, 2017
More Decks by Felipe Arimateia
See All by Felipe Arimateia
Compartilhando e acelerando com módulos em aplicações Android v2
felipearimateia
1
170
Compartilhando e acelerando com módulos em aplicações Android
felipearimateia
2
61
Firebase além do chat
felipearimateia
0
100
Firebase ML Kit: Educando com Machine Learning
felipearimateia
0
38
Monetizando suas aplicações: O que pode e o que não pode, e como fazer
felipearimateia
0
79
Testes de UI legíveis e sustentáveis para Android
felipearimateia
0
37
Cloud Functions para Firebase
felipearimateia
1
51
Construindo Aplicações Android com Firebase
felipearimateia
1
86
Firebase: dando um Up na sua aplicação.
felipearimateia
0
130
Other Decks in Technology
See All in Technology
The seven pitfalls of AI (revised version)
ufried
0
130
ScotSecure West 2026 - Glasgow
raybugg
0
210
形式手法を使って仕様をコーディングしよう
mikanichinose
0
140
20260915deck.gl-raster を使ってみた
rena1208
0
170
Antigravity SDK for the Java Developer
glaforge
0
240
3人で1000GPU超を統合運用する?マルチクラウド&オンプレを跨ぐ、構築と運用のリアル!
kazukun0716
2
770
Claude Designがめちゃくちゃ便利なので使ってほしい
diggymo
0
170
GitHub Agentic Workflows を触ってみる
htkym
2
880
手を動かして実感する、Kiro が変える開発体験
inariku
0
420
CI/CDではもう遅い - 人とAIが迂回しないDevSecOps Verify基盤の再設計 -
kintotechdev
1
460
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
220
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
340
Featured
See All Featured
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
330
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
930
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
270
The browser strikes back
jonoalderson
0
1.7k
The agentic SEO stack - context over prompts
schlessera
0
950
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
560
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
420
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
sira's awesome portfolio website redesign presentation
elsirapls
0
430
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