Continuando el post de «Introducción a Retrofit» donde realizamos una breve preparación a lo que es el uso de la librería Retrofit, en esta oportunidad, ya conociendo el funcionamiento básico del Cliente REST de Retrofit, implementaremos los métodos de petición GET, POST, UPDATE, DELETE para consumir un API que esta en Internet.
¿Que necesitamos?
En el post anterior se puedes ver a detalle todos los *.jar necesarios para ejecutar el proyecto, así como otras formas de uso de Retrofit.
Comencemos.
Paso 1. Estructura del proyecto java
Creamos un proyecto Java Aplication con el nombre de Cliente Retrofit y agregamos las siguientes clases:
Paso 2. MiAPIService
Establecemos los endpoints en una interface mediante anotaciones especiales de modificación, detallamos información sobre los los parámetros y el método de cada solicitud.
package org.example; import java.util.List; import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.PUT; import retrofit2.http.Path; /** * @see https://www.jc-mouse.net/ * @author mouse */ public interface MiAPIService { @GET("posts") Call<List<Articulo>> obtenerTodosLosArticulos(); @GET("posts/{id}") Call<Articulo> obtenerArticulo(@Path("id") int id); @POST("posts") Call<Articulo> crearArticulo(@Body Articulo articulo); @PUT("posts/{id}") Call<Articulo> actualizarArticulo(@Path("id") int id, @Body Articulo articulo); @DELETE("posts/{id}") Call<ResponseBody> borrarArticulo(@Path("id") int id); }
Paso 3. Articulo
Establecemos la clase Articulo (Post) para el manejo del JSON del API
package org.example; /** * @see https://www.jc-mouse.net/ * @author mouse */ public class Articulo { 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 4. El Cliente Retrofit
Para manejar cada una de las peticiones al REST, definimos una clase cliente, esta clase realizará las peticiones de forma sincrónica, es decir, se envía una solicitud y se espera una respuesta, hasta que la respuesta no llegue, la aplicación permanece bloqueda. Este tipo de protocolo ya no es muy utilizado pero vale la pena conocerlo.
package org.example; import java.util.List; import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; /** * Llamadas Sincronicas * @see https://www.jc-mouse.net/ * @author mouse */ public class ClienteRetrofit { private static final String API_URI = "https://jsonplaceholder.typicode.com/"; private static final Retrofit RETROFIT = new Retrofit.Builder().baseUrl(API_URI) .addConverterFactory(GsonConverterFactory.create()).build(); private static final MiAPIService SERVICE = RETROFIT.create(MiAPIService.class); public ClienteRetrofit() {} public List<Articulo> obtenerTodosLosArticulos() throws Exception { Call<List<Articulo>> articulos = SERVICE.obtenerTodosLosArticulos(); return articulos.execute().body(); } public Articulo obtenerArticulo(int id) throws Exception { Call<Articulo> articulo = SERVICE.obtenerArticulo(id); return articulo.execute().body(); } public Articulo crearArticulo(Articulo art) throws Exception { Call<Articulo> articulo = SERVICE.crearArticulo(art); return articulo.execute().body(); } public Articulo actualizarArticulo(int id, Articulo art) throws Exception { Call<Articulo> articulo = SERVICE.actualizarArticulo(id, art); return articulo.execute().body(); } public ResponseBody borrarArticulo(int id) throws Exception { Call<ResponseBody> articulo = SERVICE.borrarArticulo(id); return articulo.execute().body(); } }
paso 5. Main
Finalmente en la clase Main, implementamos el código para realizar cada una de las peticiones imprimiendo el resultado en pantalla.
package org.example; import java.util.List; import okhttp3.ResponseBody; /** * @see http://www.jc-mouse.net/ * @author mouse */ public class Main { public static void main(String[] args) throws Exception { System.out.println("Inicio"); ClienteRetrofit clienteRetrofit = new ClienteRetrofit(); List<Articulo> arts = clienteRetrofit.obtenerTodosLosArticulos(); System.out.println("> Total articulos: " + arts.size() + "\n"); System.out.println("> OBTENER ARTICULO CON ID:10"); Articulo art = clienteRetrofit.obtenerArticulo(10); System.out.println(art); System.out.println("> CREAR NUEVO ARTICULO"); Articulo new_art = new Articulo(); new_art.setUserId(28); new_art.setId(101); new_art.setTitle("Titulo Nuevo Articulo"); new_art.setBody("Lorem ipsum"); Articulo art_new = clienteRetrofit.crearArticulo(new_art); System.out.println(art_new); System.out.println("> ACTUALIZAR ARTICULO"); art.setTitle("Titulo actualizado"); art.setBody(""); Articulo art_up = clienteRetrofit.actualizarArticulo(10, art); System.out.println(art_up); System.out.println("> ELIMINANDO ARTICULO CON ID: 21"); ResponseBody responseBody = clienteRetrofit.borrarArticulo(24); System.out.println(responseBody.string()); System.out.println("\nFin"); } }
Y ejecutando el proyecto tenemos:
Eso es todo, en un próximo post, implementaremos este cliente en una aplicación android con llamadas asincronicas. Hasta pronto.
enjoy!
Acierta los colores o Adivina los colores es un sencillo juego que consiste en que dado 6 colores «rojo», «verde», «salm[...]
En este post personalizaremos un componente JComboBox para que sus elementos acepten tablas (JTable) en lugar de texto s[...]
Song Maker es el nuevo experimento de Google Chrome Music Lab que permite al usuario crear música desde el navegador a t[...]
El componente swing JLabel nos permite cargar una imagen con la propiedad setIcon, sin embargo la imagen no toma el tama[...]
Las matemáticas son fundamentales para la vida y aparte de las actividades clásicas de enseñanza desarrolladas en el aul[...]
Segunda parte del tutorial [Introducción a Scene Builder y MVC (Parte I)]. En esta segunda parte, completaremos el diseñ[...]