Llamadas REST-API en Java
Vamos a ver como consumir una API REST, que es una interfaz de programación que aplica un conjunto de límites de la arquitectura REST.
Para realizar estas llamadas vamos a utilizar la librería Retrofit2. Se trata de una librería que nos permite hacer peticiones HTTP, gestionar los parámetros de la petición y parsear de forma automática la respuesta a un tipo datos.

A continuación vamos a ver un ejemplo en el que haremos llamadas a un servicio API REST, en concreto PokeApi, que nos permite hacer estas llamadas sin necesidad de tener una key. Este ejemplo imprimirá la id del pokemon y su nombre.
Lo primero que necesitamos hacer es importar Retrofit2, para ello puedes descargar la librería desde Retrofit2, o puedes utilizar Maven o Gradle. En mi caso yo usaré Gradle e implementaré las siguientes dependencias en el archivo build.gradle.
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.8.0'
Una vez ya instalado vamos a pasar a definir el modelo de datos. La respuesta a nuestra llamada nos devolvera un Array de Pokemon, y estos Pokemon contendrán el nombre y la URL de la imagen. Por lo que quedaría tal que así.
public class Pokemon {
private String name;
private String url;
public String getName() {
return name;
}
public String getUrl() {
return url;
}
}
public class PokemonList {
private ArrayList<Pokemon> results;
public ArrayList<Pokemon> getPokemonList() {
return results;
}
}
Ahora vamos a crear una clase llamada PokemonApi, que contendrá la url base de la web, creará la instancia de retrofit y nos permitira acceder al servicio.
public class PokemonApi {
public static String url = "http://pokeapi.co/api/v2/";
public static Retrofit builder(String url){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
return retrofit;
}
public static PokemonService getPokemonService(){
return PokemonApi.builder(url).create(PokemonService.class);
}
}
A continuación vamos a crear la interfaz PokemonService, que tendrá un método para obtener la lista de Pokemon. Este método recibirá un parámetro que indicará cuantos Pokemon queremos mostrar. Para ver todos los parámetros que soporta la api, puedes encontrarlos en la documentación oficial de PokeApi
public interface PokemonService {
/* "pokemon" es la continuación de la url base por lo que la url
* quedaría tal que asi -> http://pokeapi.co/api/v2/pokemon
*/
@GET("pokemon")
Call<PokemonList> getPokemonListResult(@Query("limit") int limit);
}
Con esto ya estaría todo preparado para realizar las llamadas.
public static void main(String[] args) {
// Creamos el servicio
PokemonService service = PokemonApi.getPokemonService();
// Establecemos en esta variable cuantos pokemon queremos mostrar, en este caso 100
int limit = 100;
// Creamos la llamada usando el método getPokemonListResult() del servicio
Call<PokemonList> pokemonListCall = service.getPokemonListResult(limit);
/* Ponemos la llamada en la cola. onResponse() se ejecutará si hemos obtenido los datos y
* onFailure() si se ha producido un error
*/
pokemonListCall.enqueue(new Callback<PokemonList>() {
@Override
public void onResponse(Call<PokemonList> call, Response<PokemonList> response) {
if(response.isSuccessful()){
PokemonList pokemonList = response.body();
int counter = 1;
for(Pokemon pokemon : pokemonList.getPokemonList()){
System.out.println(counter + "- " + pokemon.getName());
counter++;
}
}else{
System.out.println(response.errorBody());
}
}
@Override
public void onFailure(Call<PokemonList> call, Throwable t) {
System.out.println("Error al recuperar los datos");
}
});
}
El resultado sería el siguiente. El resultado que nos muestra son los 100 primeros Pokemon, que son los que hemos establecido en el límite.
Resultado.
1- bulbasaur
2- ivysaur
3- venusaur
4- charmander
5- charmeleon
6- charizard
7- squirtle
8- wartortle
9- blastoise
10- caterpie
11- metapod
12- butterfree
13- weedle
14- kakuna
15- beedrill
16- pidgey
17- pidgeotto
18- pidgeot
19- rattata
20- raticate
21- spearow
22- fearow
23- ekans
24- arbok
25- pikachu
26- raichu
27- sandshrew
28- sandslash
29- nidoran-f
30- nidorina
31- nidoqueen
32- nidoran-m
33- nidorino
34- nidoking
35- clefairy
36- clefable
37- vulpix
38- ninetales
39- jigglypuff
40- wigglytuff
41- zubat
42- golbat
43- oddish
44- gloom
45- vileplume
46- paras
47- parasect
48- venonat
49- venomoth
50- diglett
51- dugtrio
52- meowth
53- persian
54- psyduck
55- golduck
56- mankey
57- primeape
58- growlithe
59- arcanine
60- poliwag
61- poliwhirl
62- poliwrath
63- abra
64- kadabra
65- alakazam
66- machop
67- machoke
68- machamp
69- bellsprout
70- weepinbell
71- victreebel
72- tentacool
73- tentacruel
74- geodude
75- graveler
76- golem
77- ponyta
78- rapidash
79- slowpoke
80- slowbro
81- magnemite
82- magneton
83- farfetchd
84- doduo
85- dodrio
86- seel
87- dewgong
88- grimer
89- muk
90- shellder
91- cloyster
92- gastly
93- haunter
94- gengar
95- onix
96- drowzee
97- hypno
98- krabby
99- kingler
100- voltorb