uma esta comentada acima.A API do Star WarsVamos utilizar nesse exemplo dois endpoints da API do Star Wars: films e people.Se fizermos uma requisicao para http://swapi.co/api/films o resultado sera o JSON com a lista dos filmes de Star Wars.{ "count": 7, "next": null, "previous": null, "results": [ { "characters": [ "http://swapi.co/api/people/1/", ... ], "created": "2014-12-10T14:23:31.880000Z", "director": "George Lucas", "edited": "2014-12-12T11:24:39.858000Z", "episode_id": 4, "opening_crawl": "It is a period of civil war..", "planets": [ "http://swapi.co/api/planets/1/", ... ], "producer": "Gary Kurtz, Rick McCallum", "release_date": "1977-05-25", "species": [ "http://swapi.co/api/species/1/", ... ], "starships": [ "http://swapi.co/api/starships/2/", ... ], "title": "A New Hope", "url": "http://swapi.co/api/films/1/", "vehicles": [ "http://swapi.co/api/vehicles/4/", ... ] }, // Aqui viriam os demais filmes... ]}Se utilizarmos http://swapi.co/api/films/1 ele trara apenas o filme primeiro filme.Percebam que os campos "characters", "planets", "species", "starships" e "vehicles" retornam um array de strings, onde cada string representa o endereco para aquela determinada informacao. Sendo assim, se acessarmos a URL http://swapi.co/api/people/1/ teremos o resultado abaixo.{ "name": "Luke Skywalker", "height": "172", "mass": "77", "hair_color": "blond", "skin_color": "fair", "eye_color": "blue", "birth_year": "19BBY", "gender": "male", "homeworld": "http://swapi.co/api/planets/1/", "films": [ "http://swapi.co/api/films/6/", "http://swapi.co/api/films/3/", "http://swapi.co/api/films/2/", "http://swapi.co/api/films/1/", "http://swapi.co/api/films/7/" ], "species": [ "http://swapi.co/api/species/1/" ], "vehicles": [ "http://swapi.co/api/vehicles/14/", "http://swapi.co/api/vehicles/30/" ], "starships": [ "http://swapi.co/api/starships/12/", "http://swapi.co/api/starships/22/" ], "created": "2014-12-09T13:50:51.644000Z", "edited": "2014-12-20T21:17:56.891000Z", "url": "http://swapi.co/api/people/1/"}Note que temos uma referencia cruzada aqui. O filme possui a lista de personagens e o personagem possui uma lista dos filmes (no campo "films") em que ele participou.Entendida a API, vamos comecar a brincar com ela!Definindo as classes de modeloUm dos recursos que eu gosto bastante do Kotlin e a possibilidade de criar data classes, que sao os nosso famosos POJOs. E possivel criar varias classes publicas no mesmo arquivo e no Kotlin temos o conceito de propriedade, ou seja, nao e preciso definir os gets e sets (embora voce possa customiza-los).Crie o arquivo DataClassesWeb.kt (ou o nome que preferir) que contera as classes que representarao o retorno das requisicoes que faremos a API.package br.com.nglauber.starwarsrx.model.apiimport com.google.gson.annotations.SerializedNamedata class FilmResult(val results : List<Film>)data class Film (val title : String, @SerializedName("episode_id") val episodeId : Int, @SerializedName("characters") val personUrls : List<String>)data class Person(val name : String, val gender : String)A classe FilmResult representara o retorno da chamada que faremos a lista de filmes. Ela possui a propriedade results que e uma lista de Film. A classe Film, por sua vez, possui o titulo, o id do episodio e a lista das URLs para obtermos as informacoes dos personagens. Por fim, a classe Person possui o nome e o genero do personagem.Agora crie mais um arquivo chamado DataClasses.kt com as classes "de negocio" da nossa aplicacao.package br.com.nglauber.starwarsrx.modeldata class Movie (val title : String, val episodeId : Int, val characters : MutableList<Character>)data class Character(val name : String, val gender : String){ override fun toString(): String { return "${name} / ${gender}" }}Como podemos observar, essas classes sao bem parecidas, mas preferi separar as classes de retorno de API, das que serao utilizadas na UI.Definindo as chamadas a API com RetrofitNesse exemplo, vamos utilizar apenas dois endpoints da API do Star Wars: o que retorna a listagem de filmes; e o que obtem o personagem pelo seu id.