martes, 9 de abril de 2013

MVC 4.0: Cómo crear una Web API REST usando la plantilla de Visual Studio 2012

Hace unas semanas asistí a unas sesiones técnicas donde explicaban temas interesantes sobre Service Bus en Windows Azure y allí vi como creaban servicios usando la plantilla MVC Web API de Visual Studio 2012. Me sorprendió gratamente la rapidez y facilidad para levantar un servicio REST. Hasta ahora si quería implementar una comunicación REST me hubiese creado un servicio WCF con un WebHttpBinding y jugando con atributos como WebGet, etc. hubiese modificado el comportamiento del servicio WCF para que tenga una respuesta RESTFull aunque sin duda es más complejo levantar y configurar el servicio REST con WCF que si usamos MVC WebAPI.

A continuación crearé paso a paso AreaTICWebAPI donde levantaremos un servicio 'Articulo' que más adelante usaré en futuras publicaciones para hacer alguna que otra comparativa con WCF y subir algún ejemplo sobre creación de clientes para la API.

Vamos con el ejemplo:

En primer lugar abrimos Visual Studio 2012, abrimos 'Nuevo Proyecto' tipo Web y seleccionamos la opción Aplicación Web de ASP.NET MVC 4.0.

areaTIC, ASP.NET MVC 4.0, Menú Proyecto Visual Studio

En el siguiente paso seleccionamos la plantilla WebAPI.

Veremos que automáticamente se crearán una serie de archivos en el proyecto típicos de una plantilla MVC donde tenemos una carpeta para las vistas, controlador y modelos. A parte si nos fijamos incluye un Area adicional que servirá para aportar información sobre la API a los clientes que se dispongan a usarla.

Si llegado este punto pulsamos F5 la web se ejecutará en IIS Express y nos llevará a una página "Home" donde tenemos un link API en la parte superior que nos muestra información sobre el servicio por defecto que tenemos en la WebAPI.

Ahora veremos como personalizar la vista 'Home' y sustituiremos el servicio que viene por defecto con la plantilla 'Values' por nuestro servicio 'Articulo'.

Para personalizar la vista no me he roto mucho los cuernos si no que simplemente he editado las vistas que están en la carpeta Views/Home y Views/Shared, lo mismo con Areas/HelpPage/Views/Help y Areas/HelpPage/Views/Shared dejando el diseño por defecto que propone la plantilla.

areaTIC, ASP.NET MVC 4.0, AreaTic WebApi


Veamos ahora como crear nuestro propio servicio Articulo.
  • Creamos una clase Articulo dentro de la carpeta "Models"
    namespace WebAPI.Models
    {
        public class Articulo
        {
            public int Codigo { get; set; }
            public string Titulo { get; set; }
            public DateTime Fecha { get; set; }
            public string Autor { get; set; }
            public string Descripcion { get; set; }
        }
    }
    
  • Añadimos un controlador (Botón derecho en la carpeta "Controllers" -> Agregar Controlador)

    areaTIC, ASP.NET MVC 4.0, Seleccionar controlador


    namespace WebAPI.Controllers
    {
        public class ArticuloController : ApiController
        {
            // GET api/articulo
            public IEnumerable<Articulo> Get()
            {
                //TODO: Acceder a datos y devolver una lista de artículos.
                // Para testear la API devuelvo un par de artículos de test.
    
                return new List<Articulo>() 
                { 
                    new Articulo(){ Codigo = 1, Autor = "Carlos Cañizares", Descripcion = "bla bla", Fecha = DateTime.Now, Titulo = "MVC Web Api - Server"},
                    new Articulo(){ Codigo = 2, Autor = "Carlos Cañizares", Descripcion = "bla bla", Fecha = DateTime.Now, Titulo = "MVC Web Api - Client"}
     
                };
            }
    
            // GET api/articulo/5
            public Articulo Get(int id)
            {
                //TODO: Acceder a datos en busca del artículo con Id que recibimos por filtro.
                return new Articulo();
            }
    
            // POST api/articulo
            public void Post([FromBody]Articulo value)
            {
                //TODO: implementar el acceso a datos para insertar el objeto que recibimos por parámetro.
            }
    
            // PUT api/articulo/5
            public void Put(int id, [FromBody]Articulo value)
            {
                //TODO: implementar el acceso a datos para realizar un update del Articulo que recibimos por parámetro.
            }
    
            // DELETE api/articulo/5
            public void Delete(int id)
            {
                //TODO: implementar el acceso a datos para eliminar el artículo correspondiente al identificador que hemos recibido por parámetro.
            }
        }
    }
    
Con esto ya tendríamos el servicio, si pulsamos F5 y vamos al link "API" que se muestra en la parte superior derecha de la página home accederemos a la referencia de la API donde ya debería aparecer nuestro servicio Articulo.

areaTIC, ASP.NET MVC 4.0, Web Api


areaTIC, ASP.NET MVC 4.0, Web Api Referencia servicio artículo


Como veis ya aparece el servicio automáticamente en la página de ayuda simplemente con añadir el controlador en la carpeta correspondiente, la misma plantilla se encarga de generar la documentación de ayuda correspondiente para los métodos que se han definido en el servicio.

Hasta aquí el artículo de hoy, la semana que viene publicaré un artículo donde crearemos un cliente que sea capaz de interactuar con cualquier servicio de la API que siga este patrón. Cualquier corrección o duda es bienvenida como siempre podéis enviarla por email o comentarios. Recordar que podéis seguir también areaTIC en las redes sociales!! Que vaya bien la semana!


9 comentarios:

iva29234 dijo...

Primero de todo darte las gracias por compartir tus conocimientos con nosotros...

Estoy añadiendo lo que pones en el namespace WebAPI.Controllers

Y en todo los lugares donde aparece Articulos me marca con linea roja el error

http://imageshack.us/photo/my-images/15/bhep.jpg/

¿Cúal es el error?

Gracias de antemano

iva29234 dijo...

b

Anónimo dijo...

Me aparece el mismo error mencionado por iva29234

Carlos Cañizares dijo...

Hola, a los 2 perdón voy un poco tarde imagino que tenéis el problema más que resuelto. Es raro... tenéis el using del namespace donde está ubicado el modelo en el controller?

muda2811 dijo...

Soy yo o a este tutorial le faltan varios pasos??

Carlos Cañizares dijo...

Buenas, en principio lo veo ok si echas de meno algo o tienes alguna duda dime! Comentarte que si te planteas realizar una api rest a día de hoy este tutorial ha quedado un poco desfasado. Te recomiendo que no uses MVC 4.0 tira del paquete de web api directamente de asp.net. Si necesitas orientarte o así puedes escribirme a c.canizaresestevez@gmail.com que te contestaré encantado. Saludos!

Carlos Cañizares dijo...

Buenas, en principio lo veo ok si echas de meno algo o tienes alguna duda dime! Comentarte que si te planteas realizar una api rest a día de hoy este tutorial ha quedado un poco desfasado. Te recomiendo que no uses MVC 4.0 tira del paquete de web api directamente de asp.net. Si necesitas orientarte o así puedes escribirme a c.canizaresestevez@gmail.com que te contestaré encantado. Saludos!

muda2811 dijo...

Muchas gracias por tu respuesta, Si la verdad necesito orientacion porque soy nueva en esto.

muda2811 dijo...

La carpeta de Areas que mencionas, no la encuentro

Publicar un comentario