Upgrade to Pro — share decks privately, control downloads, hide ads and more …

La stack réseau Android, disponible également p...

La stack réseau Android, disponible également pour vos backs

Jeremie Martinez

April 06, 2015
Tweet

More Decks by Jeremie Martinez

Other Decks in Technology

Transcript

  1. Un peu d’histoire Apache HTTP Client • Android 1.0 •

    API très vieille • Buggé • Peu évolué HttpUrlConnection • Android 1.0 • TRÈS buggé ( ≠ bugs sur ≠ versions)
  2. OkHttp Introduction en mai 2013 par Square Flexible (non dépendant

    de la plateforme) API Moderne et utilisant les dernières technos Mise en place d’une compatibilité avec les API legacy Intégration OkHttp à AOSP avec Android 4.4
  3. Okio Est le socle des streams de OkHttp Complémentaire et

    compatible avec les packages java.io et java.nio Seulement des bytes ! 2 types de données : ByteString et Buffer 2 types de stream : Source et Sink API simple et efficace (md5, sha256, base64, utf8, hex, …) {KILLER FEATURES}
  4. OkHttp, c’est moderne Support de HTTP/2 et SPDY Utilisation transparente

    de GZIP Cache pour les réponses très efficace Capacité à récupérer silencieusement des problèmes de connections Consommation des adresses alternatives (data center) Implémentation moderne pour le TLS (SNI et ALPN)
  5. OkHttp, c’est bien codé Immutable Synchrone Asynchrone avec callback Facilement

    configurable Fluent Complexe mais clair {KILLER FEATURES}
  6. OkHttp, c’est testable Introduction de MockWebServer Mockito like dans le

    fonctionnement Tout est testable (Header, Code, Caching, Réponse, …) Sous forme de queue
  7. OkHttp, c’est extensible Retrofit Créé en 2010 par Bob Lee

    (Lead core Android, CTO Square, créateur Guice, Guava, Dagger, Lead JSR 330) Rendu public en mai 2013 Maintenu par les mêmes personnes qu’OkHttp “Un client REST type-safe”
  8. Retrofit - Création RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(“http://blog.xebia.fr”) .setClient(…)

    // transport agnostic .setConverter(…) // content format agnostic // JSON, Proto, … .setErrorHandler(…) // global error handler .setExecutors(…) // executor agnostic .setLogLevel(…) // log level .build(); XebiaApi service = restAdapter.create(XebiaApi.class);
  9. Retrofit - Threading Synchrone Asynchrone Observable @GET("/users") List<User> users(); @GET("/users")

    void users(Callback<List<User>> callback); @GET("/users") Observable<List<User>> users();
  10. Retrofit - Error Handling Synchrone try { List<User> users =

    xebiaApi.users(); } catch(RetrofitError error) { // Handle error }
  11. Retrofit - Error Handling Asynchrone xebiaApi.users(new Callback<List<User>>() { void success(List<User>

    users, Response response) { // Handle success } void failure(RetrofitError error) { // Handle error } });
  12. Retrofit - Error Handling Observable xebiaApi.users() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .flatMap(new Func1<List<User>,

    Observable<User>>() { @Override public Observable<User> call(List<User> users) { return Observable.from(users); }}) .subscribe( new Action1<User>() { @Override public void call(User user) { // Handle success each user }}, new Action1<Throwable>() { @Override public void call(Throwable throwable) { // Handle error }} );
  13. Retrofit - Interceptor Par exemple : Global header RestAdapter restAdapter

    = new RestAdapter.Builder() .setEndpoint(“http://blog.xebia.fr”) .setRequestInterceptor(new RequestInterceptor(){ @Override public void intercept(RequestFacade request) { request.addHeader("User-Agent", “xebia"); } }) .build();
  14. Retrofit - Tests MockRestAdapter mockRestAdapter = MockRestAdapter.from(restAdapter); mockRestAdapter.setDelay(1000); mockRestAdapter.setErrorPercentage(0); XebiaApi

    xebiaApi = mockRestAdapter.create(XebiaApi.class, new MockXebiaApi()); MockRestAdapter public class MockXebiaApi implements XebiaApi { @Override public List<User> users() { return Arrays.asList(new User(“user1”), …); } }
  15. Retrofit - Bilan Déclaratif Type-safe Encapsulation Agnostique Suppression boilerplate Facilement

    testable Riche en fonctionnalités Moderne grâce à OkHttp {KILLER FEATURES}
  16. Pourquoi l’adopter ? Très peu de code Facile Testable entièrement

    Agnostique Moderne Compréhensible Éprouvé