Tras una serie de cambios en mi vida personal y laboral, que me han mantenido ocupado, vuelvo a tomar las riendas de este blog. En este artículo veremos cómo podemos desplegar servicios web REST dentro de una aplicación basada en ASP .NET.

En uno de los artículos anteriores escribí acerca de las características de los Servicios Web SOAP y los Servicios Web REST. En las aplicaciones de ASP .NET es relativamente fácil crear un Servicio Web SOAP, ya que bastaría con añadir un elemento de tipo “.asmx” y especificarle los Métodos Web que va a tener. Como expliqué en el artículo que he mencionado, la URL que se va a desplegar es el propio fichero .asmx y éste ya contiene tódos los métodos web asignados.

Cuando creamos un Servicio Web REST, sin embargo, se establece una URL base y somos nosotros los encargados de decidir el formato de URL que vamos a aceptar. Dependiendo de si el formato de la URL es uno u otro, ejecutaremos una funcionalidad u otra. Las llamadas esta vez se hacen sobre un método en particular.

En este ejemplo, crearemos un Servicio Web REST que devuelva la información de un Cliente a través de su DNI o bien que devuelva un listado con todos los Clientes.

Formatos de URL

Nuestro Servicio Web REST tendrá la siguiente URL base:

http://localhost:50316/api/clientes

A partir de aquí, dependiendo del formato de la URL a la que llamen, podremos ejecutar 2 funcionalidades:

http://localhost:50316/api/clientes/ – Listará todos los clientes
http://localhost:50316/api/clientes/44444444K – Devolverá la información del cliente con el D.N.I.  44444444K

Preparación del Ejemplo

He creado una aplicación web basada en Web Forms y he añadido una página ListadoClientes.aspx. Esta página de momento sólo tendrá la estructura inicial que luego rellenaremos consumiendo los servicios.

Al cargar la página, llamaremos al servicio REST para que nos devuelva todos los clientes y rellenaremos la tabla tablaClientes. Incluyendo en la columna acción un enlace que permita imprimir en el div detalleCliente los datos completos del cliente seleccionado.

Crear el mapeo de ruta

En el resto de elementos de ASP .NET Web Forms, muchos de los elementos que creamos son accesibles directamente (.aspx, .asmx…). Sin embargo, cuando hablamos de un Servicio REST, podemos especificar el formato de la URL que nos interese. Así que necesitamos decirle a ASP .NET que si detecta una URL específica y con unos parámetros específicos.

Para ello, abrimos el archivo Global.asax (si no existe lo creamos) y escribimos los siguiente en el método Application_Start (independientemente de lo que ya tenga escrito):

Con esto le estamos diciendo que si la URL empieza por api (en vez de “api” podéis poner la palabra clave que queráis) no se trata de un recurso normal, si no que lo tiene que mapear. Depués va el nombre del controlador y por último, puede tener o no un parámetro dni.

Crear el controlador REST

Ahora que ya hemos especificado el mapeo de ruta, vamos a crear el código que se ejecutará cuando se detecten las URL previstas. Para ello crearé una Clase de controlador de Web API y la llamaré ClientesController (El nombre ha de terminar en Controller, ya que .NET quitará Controller para determinar el nombre del controlador en la URL)

Esta clase representará un Servicio REST, que podrá aceptar diferentes protocolos HTTP, así que aparecerán los métodos Get, Post, Put y Delete. Se pueden eliminar los que no interesen. En mi caso, como sólo se van a poder recuperar Clientes, me quedaré con los métodos Get.

Para ello, voy a definir el modelo de datos en un fichero Cliente.cs, será una clase con las propiedades DNI, Nombre y Apellidos (IMPORTANTE: Para que la serialización sea correcta, se ha de añadir el atributo DataContract a la clase y DataMember a las propiedades)

Después, en la clase ClientesController, defino un array que simbolizará el repositorio de clientes y rellenaré el método Get(), que devolverá todos los clientes, y el método Get(String dni), que acepta un parámetro dni

Pues con esto ya podemos probar las URL y ver qué nos devuelve el navegador.

URL: http://localhost:55626/api/clientes

URL: http://localhost:55626/api/clientes/44444444K

En la siguiente entrada veremos cómo podemos consumir este servicio mediante JQuery.

¡Hasta la próxima!

Rupert.