miércoles, 18 de septiembre de 2019

Llamar un API con Netbeans 11 y Java 12


Vamos a usar la librería HttpClient de Java para poder hacer llamados a Rest APIs, con esta librería podemos desarrollar un cliente de Rest muy fácil. Podemos encontrar el Api aquí http://dummy.restapiexample.com/

En este caso utilizaremos una aplicación de console app de Java 12 desde donde vamos a consumir el servicio de APIs con datos genéricos.




Cuando tenemos listo el proyecto vamos a crear dos clases que nos permitirán interactuar fácilmente con los objetos json del API. Primero creamos la clase EmployeesPojo y luego la clase EmployeePojo.




La clase EmployeesPojo nos permite mapear los datos que retorna el servidor en objetos de Java para poder manipularlos fácilmente.


public class EmployeesPoco {
    private String id;
    private String employee_name;
    private String employee_age;
    private String profile_image;

La clase EmployeePojo la utilizaremos para agregar nuevos objetos en el servidor.


public class EmployeePojo {
    
    private String name;
    private String salary;
    private String age;

Antes de continuar requerimos descargar un Jar para convertir los resultados de json a objetos de Java de una manera muy simple. En este ejemplo vamos a utilizar la librería Gson de Google, está la pueden encontrar en Maven o pueden agregar el Jar al proyecto.

Repositorio de Gson: https://github.com/google/gson

Lo primero que debemos hacer es agregar las siguientes referencias en la clase donde queremos usar el HttpClient


import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
import java.util.List;

En el caso de este ejemplo lo estamos haciendo en la clase Main.


 public static void main(String[] args) {
        var client = HttpClient.newHttpClient();
        var request = HttpRequest.newBuilder().uri(URI.create("http://dummy.restapiexample.com/api/v1/employees")).header("Content-Type", "application/json").build();

        client.sendAsync(request, BodyHandlers.ofString())
                .thenApply(HttpResponse::body)
                .thenAccept(response -> {
                    List<EmployeesPoco> employees = new Gson().fromJson(response, new TypeToken<List<EmployeesPoco>>() {
                    }.getType());
                    employees.forEach((employee) -> {
                        System.out.println("Name: " + employee.getEmployee_name());
                    });
                }).join();

        var newEmployee = new EmployeePojo("Java Test", "1000", "30");
        var json = new Gson().toJson(newEmployee);
        request = HttpRequest.newBuilder().uri(URI.create("http://dummy.restapiexample.com/api/v1/create")).header("Content-Type", "application/json")
                .POST(BodyPublishers.ofString(json)).build();

        client.sendAsync(request, BodyHandlers.ofString()).thenApply(response -> {
            System.out.println(response.statusCode());
            return response;
        }).thenAccept(response -> {
                    System.out.println(response);
                }).join();

    }

Primero creamos un objeto de tipo HttpClient con el que podemos realizar la peticion de los datos del API. Despues de esto creamos un objeto HttpRequest donde indicamos el url de nuestro servicio de Rest. La direccion del servicio se debe indicar con un objeto de tipo URI el cual tiene el método create para construir lo necesario para consumir el servicio. En este primer ejemplo vamos a utilizar el método de GET.

Ahora vamos a usar el método sendAsync del cliente http que desarrollamos anteriormente. Este requiere dos paramteros uno con el request que construimos y el segudo parametro es como vamos a manejar la respuesta del servicio. En nuestro ejemplo esperamos un String con los datos del servidor.
En el método thenAccept vamos a maniopular el resultado del servidor. En este caso usando la librería de Gson tenemos que crear un objeto nuevo de Gson y convertir el resutlado del servidor en una lista de Java sobre esta lista usamos un forEach para ver cada uno de los elementos y desplegamos el nombre de cada uno de los empleados. Ahora bien en ese mismo mitodo se puede crear otro tipo de manipulaciones de estos datos.

Para hacer uso del verbo POST de Rest lo primero que vamos hacer es crear un objeto de tipo EmployeePoco y le pasamos los datos que deseamos almacenar en el servidor.

Nuevamente con la librería Gson creamos un objeto que nos permite convertir el EmployeePoco a un text con el json que deseamos enviar al servidor.

Creamos un nuevo HttpRequest y le indicamos que el método que deseamos usar es un post en el cual asignamos el json que se va a guardar en el servicio.

Usando nuevamente el método sendAsync invocamos el post con el URI que creamos en el request y esperamos la respuesta en el método thenAccept si este nos responde un codigo 200 quiere decir que nuestro objeto se guardo correctamente.

Ejemplo


¿Quieres aprender java y C#?

Etiquetas: , , , , ,

viernes, 6 de septiembre de 2019

Rest API con C#


Vamos a ver como llamar un Api usando C#, en este caso usando una aplicación de .netcore.

Lo primero que vamos hacer es crear una aplicación de Console app con Visual Studio 2019. En mi caso tiene de nombre TestDummyApi y vamos a utilizar un endpoint con datos para hacer testing. Podemos encontrar el Api aquí http://dummy.restapiexample.com/

Con el proyecto listo vamos a crear dos clases Poco para guardar y leer los datos del Api

La clase EmployeesPoco que nos permite leer los datos que vamos a recibir del Api.

La clase EmployeePoco que nos permite crear un objeto con los datos que deseamos enviar al Api para guardarlos.


Ahora muy fácil. Debemos de ir a el administrador de paquete (Nuget)

Tenemos que buscar el paquete system.net.http que nos va a permitir hacer las llamadas de los Apis.

Ahora lo tenemos que instalar en el proyecto que estamos trabajando.

Con esto podemos crear el using que vemos en la línea 10 con un objeto de tipo HttpClient para hacer las llamadas de los endpoints. Ahora todo el código que vamos hacer para el uso de los Apis lo agregamos entre las llaves de la línea 11 y 13.

Antes de continuar debemos agregar una librería nueva que nos permite convertir datos de objetos a json y de json a objetos.

Con esto ya estamos listos para desarrollar nuestra app


Usando el objeto de client podemos hacer llamado a un metodo GetStringAsync, este requiere que se le envie el URL donde vamos a usar los datos. El resultado de este Api nos retorna una lista de empleados.

Usando el foreach vamos a recorrer la lista que nos retorno el Api podemos recorrer toda la lista. En este momento podemos ver todos los datos que tiene el Api. En nuestro ejemplo lo que vamos a visualizar es el nombre de cada uno de los empleados pero se puede ver el resto de los datos.

Ahora si vamos a invocar el método de post

Lo primero que tenemos que hacer es el objeto que deseamos guardar en el servicio del Api. En este caso el objeto es de tipo EmployeePoco, asignamos los valores de las propiedades. Luego este objeto lo convertimos en un json que al final es los datos que deseamos enviar. Esta información se asigna a la variable data.

Usando el método PostAsync del objeto client que ya tenemos vamos a poder enviar esta información. Este método requiere como primer parámetro el endpoint que se ocupa para almacenar datos. Como segundo parámetro le enviamos la información que se ocupa almacenar. Usamos el método ReadAsStringAsync para ver el json resultante como un string.

De esta manera podemos usar Rest APIs con c#


Ejemplo

Etiquetas: , , , ,