Serializa tus datos con BSON en ASP.NET Web API – Parte II

En el primer artículo de esta serie, explicamos qué es el formato BSON y también vimos cómo construir un servicio en ASP.NET Web API con soporte para este tipo de serialización. Ahora en este artículo veremos cómo acceder desde una aplicación ASP.NET MVC a ese servicio Web API que construimos y cómo decodificar los datos obtenidos en BSON para trabajar con ellos.

Con respecto al uso de BSON para nuestras apps, se recomienda usar cuando se utilizan clientes nativos como una aplicación .NET, Windows Phone o Windows Store, ya que estas se pueden ver beneficiadas por algunas de las ventajas de BSON nombradas en el primer artículo. Para tecnologías del lado del cliente como Javascript, es posible que sea mejor alternativa trabajar con JSON, ya que Javascript y algunas librerías basadas en el pueden trabajar naturalmente con este tipo de formato. Por fortuna y gracias a la característica de negociación de contenidos en ASP.NET Web API podemos soportar en simultaneo el uso de JSON, BSON y XML por parte de nuestros clientes.

Para iniciar, crearemos un nuevo proyecto de tipo ASP.NET MVC en Visual Studio, y también le adicionaremos una clase que representa los datos de una persona, tal y como lo hicimos en la API del primer artículo, con el siguiente código:

public class Persona
{
    public int Identificacion { getset; }
 
    public string Nombre { getset; }
 
    public string Telefono { getset; }
}

Luego, debemos adicionar dos librerías al proyecto para poder acceder al servicio y trabajar con los datos BSON. Estas dos librerías son el cliente HTTP de Microsoft y la librería cliente de ASP.NET Web API. La instalación de estas dos librerías las haremos a través del gestor de paquetes Nuget, integrado a Visual Studio. Lo podemos hacer por interfaz gráfica al hacer click derecho sobre el proyecto ASP.NET MVC y seleccionando la opción “Manage Nuget Packages”.

webapi_bson_08

En la ventana que se muestra, debemos buscar las dos librerías anteriormente mencionadas y seleccionar la opción de instalarlas.

webapi_bson_03

 

webapi_bson_05

También podemos hacer la instalación de las librerías a través de la línea de comandos de Nuget que también trae integrada Visual Studio, y que se accede a través del menú View.

webapi_bson_09 webapi_bson_06 webapi_bson_04

Después de adicionar las librerías, crearemos un controlador MVC en la aplicación con un par de métodos. En este código lo que haremos es acceder al servicio Web API mediante la librería cliente HTTP de Microsoft, y luego deserializar el BSON con los datos obtenidos del servicio. Finalmente, nuestro controlador MVC debe verse así (en los comentarios del código se explica el proceso que realiza cada parte del código):

public class HomeController : Controller
{
    public ActionResult Index()
    {
        // Obtener lista de personas.
        List<Persona> personas = Task.Run(async () => await ObtenerPersonas()).Result;
 
        // Envío de datos a la vista.
        return View(personas);
    }
 
    private async Task<List<Persona>> ObtenerPersonas()
    {
        List<Persona> personas = null;
 
        // Creación de instancia de HttpClient para acceder a servicio Web API.
        using (HttpClient cliente = new HttpClient())
        {
            // URL donde se encuentra alojado el servicio Web API.
            cliente.BaseAddress = new Uri("http://localhost:60461");
 
            // Adicionar encabezado con el tipo de contenido (application/bson).
            // Con esta instrucción, el servicio Web API determina la serialización a usar.
            cliente.DefaultRequestHeaders.Accept.Clear();
            cliente.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/bson"));
 
            // Enviar petición al servicio.
            var resultado = await cliente.GetAsync("api/personas");
            resultado.EnsureSuccessStatusCode();
 
            // Deserializar el resultado.
            MediaTypeFormatter[] formatos = new MediaTypeFormatter[] { new BsonMediaTypeFormatter() };
            personas = await resultado.Content.ReadAsAsync<List<Persona>>(formatos);
        }
 
        return personas;
    }
}

El último paso es crear una vista en la que podamos ver nuestros datos (el código de la vista que usé lo puedes ver en el repositorio de Github que está al final del post), y al ejecutarla, podremos ver el siguiente resultado:

webapi_bson_10

Y hasta acá llegamos con este tema, espero que les pueda ser útil. Mi última recomendación es que siempre tengan muy en cuenta evaluar cuándo puede ser bueno usar BSON y cuando no.

¡Hasta una próxima!

El código de ejemplo de este post y el de la primera parte los puedes encontrar en mi cuenta de Github.

ironcat

Anuncios

4 Responses to Serializa tus datos con BSON en ASP.NET Web API – Parte II

  1. Pingback: Serializa tus datos con BSON en ASP.NET Web API – Parte I | hgr.net

  2. Luis Alberto says:

    No esta muy claro los tipos de aplicaciones en la que se recomiende el uso de BSON! Si estoy desarrollando una API para el cual está será consumida por una Aplicacion Web y una aplicacion Movil, que recomiendan JSON o BSON?

    • hgr says:

      Hola Luis. La recomendación es usar BSON si tu cliente tiene soporte para esto. Por ejemplo: las aplicaciones .NET pueden hacerlo perfectamente. Si estás consumiendo tu API mediante javascript, probablemente JSON es una mejor alternativa. Igual, como lo menciona el artículo, la API puede manejar ambos formatos mediante la negociación de contenidos y responder de acuerdo a lo que solicite el cliente que accede a ella.

      • Luis Alberto says:

        Excelente Hernan! La última parte si que esta muy bueno, con ello te despreocupas del soporte por parte del cliente, ya que si preparas tu desarrollo para responder con JSON, ya estas! Investigaré un poco mas acerca de esa API. Saludos!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: