Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Introducción a Retrofit: Cliente para consumir un API REST

Introducción a Retrofit: Cliente para consumir un API REST

Autor jc mouse lunes, junio 15, 2020

La página oficial de Retrofit, se describe así misma como «Un cliente REST seguro para Android y Java».  Y es así, ya que Retrofit convierte su API HTTP en una interface java de una forma sencilla y segura.  Debido a su facilidad de uso, este es uno de las bibliotecas ampliamente utilizadas en aplicaciones Android. Por defecto, Retrofit usa la biblioteca OkHttp como cliente http. Retrofit es una biblioteca de tipo seguro porque se encarga de la serialización, deserialización, concurrencia y manejo de respuestas. Actualmente se encuentra en la versión 2.9.0 y bajo licencia Apache 2.0

A continuación realizaremos como ejemplo de introducción, la implementación de Retrofit con Java el cual se conectara a un API en Internet para solicitar un recurso y luego convertir el JSON de respuesta en una clase java.

¿Qué necesitamos?

  • Librería Retrofit
  • Librería Gson
  • Rest Api de prueba
  • IDE Netbeans
  • Conocimientos básicos sobre REST
  • Java 8+

Librerías Retrofit y GSON. Se puede utilizar Retrofit desde Maven el cual nos incluirá todas las dependencias que necesitamos o también descargando el *.jar de su página oficial (clic para descargar librería). Nosotros utilizaremos la segunda opción, por lo que también necesitamos descargar sus dependencias, estas son:

dependencias jar de libreria retrofit

No debemos olvidar descargar la librería GSON.

API REST de prueba. Para saber con certeza que nuestro código funciona, debemos probar este con un API que se encuentre de preferencia en la nube, opciones tenemos varias por internet. Nosotros utilizaremos JSONPlaceholder, el cual es un fake de un API REST para pruebas y prototipos, lo cual es justo lo que necesitamos, no requiere de registro y ademas es gratis.

El recurso que consumiremos sera del tipo GET cuya url es «https://jsonplaceholder.typicode.com/posts/1«, si abrimos esta url con nuestro navegador, obtendremos el siguiente JSON de respuesta:

Objeto JSON de API REST

Este JSON de respuesta, corresponde a un post XYZ (artículo fake), el cual cuenta con los elementos: userId, id, title y body, el parámetro de entrada es el id del post, un número entero que corresponde al código del articulo que queremos ver.

Si deseas mayor información sobre este Api Fake, puedes leer su guía (en ingles) desde aquí.

El proyecto: Ejemplo Retrofit con java

Paso 1. Crea un nuevo proyecto Java Aplication con el nombre de «Test Retrofit».

Paso 2. Agrega al proyecto dos clases, Main.java y ArticuloResponce.java, ademas una interface que llamaremos MiAPIService.java. Más adelante explicaremos la función de cada una de ellas.

Paso 3. Agrega la librería Retrofit al proyecto, ademas de sus dependencias y GSON.

Hasta el momento, nuestro proyecto se debe ver así:

ejemplo cliente retrofit para kotin y java

Todo lo que hicimos hasta ahora fue preparar el terreno, a continuación escribiremos el código necesario para implementar retrofit. Si bien existen varias formas de implementar las peticiones retrofit, dependiendo del patrón de diseño que se utilice, en esta ocasión y dado el tamaño del proyecto, implementaremos la librería directamente en nuestra clase Main.

Paso 4. El modelo: ArticuloResponse

Más arriba vimos el objeto JSON que retorna nuestra petición al API de prueba, pues bien, ahora debemos implementar una clase para contener este JSON. este objeto se maneja con el nombre de Post (articulo), para no confundirlo con el verbo Post de REST, utilizaremos su nombre en español.

package org.example;
/**
 * @see https://www.jc-mouse.net/
 * @author mouse
 */
public class ArticuloResponse {
    
    private int userId;
    private int id;
    private String title;
    private String body;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    @Override
    public String toString() {
        return "Articulo{\n" + "userId=" + userId + ",\n id=" + id + ",\n"
                + " title=" + title + ",\n body=" + body + "\n}";
    }
    
}

Paso 5. API Interface: MiAPIService.java

Ahora establecemos nuestros endpoints y para ello debemos hacer uso de una interface donde mediante anotaciones especiales de modificación, detallamos información sobre los los parámetros y el método de cada solicitud.

Además, el valor de retorno debe ser siempre un objeto de llamada <T> parametrizado, en nuestro ejemplo Call<ArticuloResponse>. Si no se necesita ninguna respuesta específica de tipo, puede especificar el valor de retorno como simplemente  Call<ResponseBody>

En la anotación, indicamos la ruta de nuestra petición, si se requiere de parámetros, estos debe ir encerrados entre llaves, es decir, la ruta queda definida de la siguiente forma: «posts/{id}».

Nuestra interface queda de la siguiente forma:

package org.example;

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;

/**
 * @see https://www.jc-mouse.net/
 * @author mouse
 */
public interface MiAPIService {
    
    @GET("posts/{id}")
    Call<ArticuloResponse> getArticulo(@Path("id") int id);
    
}

Paso 6. Invocar métodos de la interface

Como último paso, debemos implementar el código para invocar métodos definidos en la interface anterior para poder comunicarnos con el API REST. Dado el tamaño del proyecto, escribiremos todos los pasos en una misma clase, en esta caso, la clase Main.

A continuación el código completo y comentado.

package org.example;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
/**
 * @see https://www.jc-mouse.net/
 * @author
 */
public class Main {

    public static void main(String[] args) {

        //Definimos la URL base del API REST que utilizamos
        String baseUrl = "https://jsonplaceholder.typicode.com/";

        //Instancia a GSON
        Gson gson = new GsonBuilder()
                .setDateFormat("yyyy-MM-dd HH:mm:ss")
                .create();
        
        //Instancia a retrofit agregando la baseURL y el convertidor GSON
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();
        
        //Se crea el servicio
        MiAPIService service = retrofit.create(MiAPIService.class);

        //Se realiza la llamada
        Call<ArticuloResponse> call = service.getArticulo(28);

        //la llamada es asincronica
        //Retrofit descarga y analiza los datos del API en un subproceso en
        //paralelo y entrega los resultados a traves de los metodos
        // onFailure o onResponse
        call.enqueue(new Callback<ArticuloResponse>() {

            /**
             * Para errores del tipo:
             *      Network Error :: timeout
             */
            @Override
            public void onFailure(Call<ArticuloResponse> call, Throwable t) {
               System.out.println("Network Error :: " + t.getLocalizedMessage());
            }

            /**
             * La respuesta del servidor
             */
            @Override
            public void onResponse(Call<ArticuloResponse> call, Response<ArticuloResponse> response) {
                //Codigo de respuesta
                System.out.println("[Code: " +  response.code() + "]");                
                if(response.isSuccessful()){//si la peticion se completo con exito
                    ArticuloResponse articulo = response.body();
                    System.out.println("Response:\n" + articulo);
                }else{//La peticion se realizo, pero ocurrio un error
                    System.out.println("ERROR: " +  response.message() );
                }
                
            }
        });
        
    }

}

Ya solo nos resta ejecutar la aplicación.

Respuesta cuando el servidor tarda en responder y se produce un error TimeOut

Error de servidor timeout

Respuesta cuando la petición se realiza con éxito

petición exitosa

enjoy!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Como capturar cambios del Slider en JavaFX

Como capturar cambios del Slider en JavaFX

En este tutorial veremos como usar el componente Slider de JavaFX , capturas los cambios que realice el usuario y con es...

Sourcetrail ahora es Open Source

Sourcetrail ahora es Open Source

Sourcetrail el explorador de código fuente de los lenguaje C, C ++, Java y Python se pasa al Software Libre y desde ahor...

Crea App multilenguaje con Android Studio

Crea App multilenguaje con Android Studio

En este post aprenderemos los pasos básicos para construir una aplicación android con soporte multilenguaje, utilizaremo...

Botón Mágico

Botón Mágico

Magic Button, es un botón animado para android bajo licencia del MIT desarrollado por Bloder (Brasil), el proyecto esta...

Crear componentes en tiempo de ejecución con Netbeans

Crear componentes en tiempo de ejecución con Netbeans

🙂 Una de las preguntas más buscadas por programadores java es la de crear componentes swing en tiempo de ejecución, eso...

TextToSpeech: Convierte texto a voz

TextToSpeech: Convierte texto a voz

TextToSpeech o TTS, es el sintetizador de voz para android, en los celulares inteligentes viene un motor TTS por defecto...

Comparte lo que sabes

Categorias

Últimas entradas

Quasar es un proyecto Open Source basado en el Framework Vue que nos permite desarrollar proyectos de todo tipo, por eje...

Continuando el post de «Introducción a Retrofit» donde realizamos una breve preparación a lo que es el uso de la librerí...

Editar un documento PDF no es tan sencillo como editar un archivo de texto por ejemplo, para editar archivos PDFs necesi...

¿Alguna vez tuviste la necesidad de hacer una captura de pantalla de una página web? Si es así, seguramente buscaste y d...

Herramientas

Generador de Enlaces a Whatsapp