Slide 1

Slide 1 text

Retrofit Jake Wharton

Slide 2

Slide 2 text

Retrofit Example: GitHub API List Contributors

Slide 3

Slide 3 text

Retrofit Example: GitHub API List Contributors GET /repos/:owner/:repo/contributors

Slide 4

Slide 4 text

Retrofit GET /repos/:owner/:repo/contributors interface GitHub { List contributors( String owner, String repo); }

Slide 5

Slide 5 text

Retrofit GET /repos/:owner/:repo/contributors interface GitHub { List contributors( String owner, String repo); } class Contributor { String login; long contributions; }

Slide 6

Slide 6 text

Retrofit GET /repos/:owner/:repo/contributors interface GitHub { List contributors( String owner, String repo); }

Slide 7

Slide 7 text

Retrofit GET /repos/:owner/:repo/contributors interface GitHub { @GET("/repos/{owner}/{repo}/contributors") List contributors( String owner, String repo); }

Slide 8

Slide 8 text

Retrofit GET /repos/:owner/:repo/contributors interface GitHub { @GET("/repos/{owner}/{repo}/contributors") List contributors( @Path("owner") String owner, @Path("repo") String repo); }

Slide 9

Slide 9 text

Retrofit RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("https://api.github.com/") .build();

Slide 10

Slide 10 text

Retrofit RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("https://api.github.com/") .build(); GitHub gitHub = restAdapter.create(GitHub.class);

Slide 11

Slide 11 text

Retrofit RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("https://api.github.com/") .build(); GitHub gitHub = restAdapter.create(GitHub.class); List contributors = gitHub.contributors("netflix", "rxjava");

Slide 12

Slide 12 text

Retrofit List contributors = gitHub.contributors("netflix", "rxjava"); for (Contributor c : contributors) { println(c.login + '\t' + c.contributions); }

Slide 13

Slide 13 text

Retrofit List contributors = gitHub.contributors("netflix", "rxjava"); for (Contributor c : contributors) { println(c.login + '\t' + c.contributions); } 1483 benjchristensen 225 zsxwing 167 samuelgruetter 146 jmhofer 137 akarnokd 105 DavidMGross 102 AppliedDuality ...

Slide 14

Slide 14 text

Retrofit interface GitHub { @GET("/repos/{owner}/{repo}/contributors") List contributors( @Path("owner") String owner, @Path("repo") String repo); }

Slide 15

Slide 15 text

Retrofit interface GitHub { @GET("/repos/{owner}/{repo}/contributors?anon=true") List contributors( @Path("owner") String owner, @Path("repo") String repo); }

Slide 16

Slide 16 text

Retrofit interface GitHub { @GET("/repos/{owner}/{repo}/contributors") List contributors( @Path("owner") String owner, @Path("repo") String repo, @Query("anon") boolean includeAnonymous); }

Slide 17

Slide 17 text

Retrofit interface GitHub { @POST("/repos/{owner}/{repo}/hooks") Response createHook( @Path("owner") String owner, @Path("repo") String repo, @Body Hook hook); }

Slide 18

Slide 18 text

Retrofit interface GitHub { @POST("/repos/{owner}/{repo}/hooks") Response createHook( @Path("owner") String owner, @Path("repo") String repo, @Body Hook hook); } class Hook { String name; Map config; List events; boolean active; }

Slide 19

Slide 19 text

Retrofit RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("https://drive.google.com/api/") .setConverter(new ProtoConverter()) .build();

Slide 20

Slide 20 text

Retrofit RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("https://drive.google.com/api/") .setConverter(new ProtoConverter()) .setClient(new OkClient()) .build();

Slide 21

Slide 21 text

Retrofit OkHttpClient client = new OkHttpClient(); client.setProtocols(Arrays.asList(HTTP_2)); RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("https://drive.google.com/api/") .setConverter(new ProtoConverter()) .setClient(new OkClient(client)) .build();

Slide 22

Slide 22 text

Retrofit ● Form URL encoding ● Response streaming ● Request interceptors ● Dynamic headers ● Android ● Multipart ● Logging ● Mock RestAdapter ● Asynchronous invoke ● AppEngine ...and more!

Slide 23

Slide 23 text

Retrofit + RxJava

Slide 24

Slide 24 text

Retrofit + RxJava interface GitHub { @GET("/repos/{owner}/{repo}/contributors") List contributors( @Path("owner") String owner, @Path("repo") String repo); }

Slide 25

Slide 25 text

Retrofit + RxJava interface GitHub { @GET("/repos/{owner}/{repo}/contributors") Observable> contributors( @Path("owner") String owner, @Path("repo") String repo); }

Slide 26

Slide 26 text

Retrofit + RxJava gitHub.contributors("netflix", "rxjava") .lift(flattenList()) .forEach(c -> println(c.login + '\t' + c.contributions));

Slide 27

Slide 27 text

Retrofit + RxJava gitHub.contributors("netflix", "rxjava") .lift(flattenList()) .forEach(c -> println(c.login + '\t' + c.contributions)); 1483 benjchristensen 225 zsxwing 167 samuelgruetter 146 jmhofer 137 akarnokd 105 DavidMGross 102 AppliedDuality ...

Slide 28

Slide 28 text

Retrofit + RxJava interface GitHub { @GET("/repos/{owner}/{repo}/contributors") Observable> contributors( @Path("owner") String owner, @Path("repo") String repo); @GET("/users/{user}") Observable user( @Path("user") String user); }

Slide 29

Slide 29 text

Retrofit + RxJava gitHub.contributors("netflix", "rxjava") .lift(flattenList()) .flatMap(c -> gitHub.user(c.login)) .forEach(user -> println(user.name));

Slide 30

Slide 30 text

Retrofit + RxJava gitHub.contributors("netflix", "rxjava") .lift(flattenList()) .flatMap(c -> gitHub.user(c.login)) .forEach(user -> println(user.name)); Ben Christensen Shixiong Zhu null Joachim Hofer null David Gross null ...

Slide 31

Slide 31 text

Retrofit + RxJava gitHub.contributors("netflix", "rxjava") .lift(flattenList()) .flatMap(c -> gitHub.user(c.login)) .filter(user -> user.name != null) .forEach(user -> println(user.name));

Slide 32

Slide 32 text

Retrofit + RxJava gitHub.contributors("netflix", "rxjava") .lift(flattenList()) .flatMap(c -> gitHub.user(c.login)) .filter(user -> user.name != null) .forEach(user -> println(user.name)); Ben Christensen Shixiong Zhu Joachim Hofer David Gross Matthias Käppler Justin Ryan Mairbek Khadikov ...

Slide 33

Slide 33 text

Retrofit + RxJava interface GitHub { @GET("/repos/{owner}/{repo}/contributors") Observable> contributors( @Path("owner") String owner, @Path("repo") String repo); @GET("/users/{user}/starred") Observable> starred( @Path("user") String user); }

Slide 34

Slide 34 text

Retrofit + RxJava gitHub.contributors("netflix", "rxjava") .lift(flattenList()) .flatMap(c -> gitHub.starred(c.login)) .lift(flattenList()) .groupBy(r -> r.full_name) .flatMap(g -> g.count().map(c -> c + "\t" + g.getKey())) .toSortedList((a, b) -> b.compareTo(a)) .lift(flattenList()) .take(8) .forEach(Main::println);

Slide 35

Slide 35 text

Retrofit + RxJava 7 Netflix/RxJava 2 twitter/finagle 2 scala/scala 2 mbostock/d3 2 kpelykh/docker-java 2 Netflix/zuul 2 Netflix/feign 2 Netflix/archaius

Slide 36

Slide 36 text

Retrofit + RxJava gitHub.contributors("square", "retrofit") .lift(flattenList()) .flatMap(c -> gitHub.starred(c.login)) .lift(flattenList()) .groupBy(r -> r.full_name) .flatMap(g -> g.count().map(c -> c + "\t" + g.getKey())) .toSortedList((a, b) -> b.compareTo(a)) .lift(flattenList()) .take(8) .forEach(Main::println);

Slide 37

Slide 37 text

gitHub.contributors("square", "retrofit") .lift(flattenList()) .flatMap(c -> gitHub.starred(c.login)) .lift(flattenList()) .filter(r -> !r.full_name.startsWith("square/")) .groupBy(r -> r.full_name) .flatMap(g -> g.count().map(c -> c + "\t" + g.getKey())) .toSortedList((a, b) -> b.compareTo(a)) .lift(flattenList()) .take(8) .forEach(Main::println); Retrofit + RxJava

Slide 38

Slide 38 text

Retrofit + RxJava 4 frankiesardo/auto-parcel 4 Comcast/FreeFlow 3 xxv/android-lifecycle 3 robolectric/robolectric 3 inmite/android-butterknife-zelezny 3 google/auto 3 facebook/rebound 3 etsy/AndroidStaggeredGrid

Slide 39

Slide 39 text

Retrofit + RxJava 4 frankiesardo/auto-parcel 4 Comcast/FreeFlow 3 xxv/android-lifecycle 3 robolectric/robolectric 3 inmite/android-butterknife-zelezny 3 google/auto 3 facebook/rebound 3 etsy/AndroidStaggeredGrid 3 Netflix/RxJava

Slide 40

Slide 40 text

Retrofit square.github.io/retrofit