Crear API RESTful con ASP.NET Web API

por el equipo de Web Camps

Laboratorio práctico: utilizar Web API en ASP.NET 4.x para crear una API REST sencilla para una aplicación de administración de contactos. También creará un cliente para consumir la API.

En los últimos años ha quedado claro que HTTP no sirve solo para servir páginas HTML. También es una potente plataforma para crear una Web API, utilizando un puñado de verbos (GET, POST, etc.) y algunos conceptos sencillos como URIy encabezados. ASP.NET Web API es un conjunto de componentes que simplifican la programación HTTP. Dado que se basa en el tiempo de ejecución de ASP.NET MVC, Web API controla automáticamente los detalles de transporte de bajo nivel de HTTP. Al mismo tiempo, Web API expone de forma natural el modelo de programación HTTP. De hecho, uno de los objetivos de Web API es no abstraerse de la realidad de HTTP. Como resultado, Web API es flexible y fácil de ampliar. El estilo arquitectónico REST ha demostrado ser una forma eficaz de aprovechar HTTP, aunque ciertamente no es el único enfoque válido de HTTP. El administrador de contactos expondrá el RESTful para enumerar, agregar y eliminar contactos, entre otros.

Este laboratorio requiere una comprensión básica de HTTP, REST, y asume que usted tiene un conocimiento básico de HTML, JavaScript y jQuery.

Nota:

El sitio web de ASP.NET tiene un área dedicada al marco de la ASP.NET Web API en https://asp.net/web-api. Este sitio seguirá proporcionando información de última hora, ejemplos y noticias relacionadas con las API web, así que consúltelo con frecuencia si desea profundizar en el arte de crear Web API personalizadas disponibles para prácticamente cualquier dispositivo o marco de desarrollo.

ASP.NET Web API, similar a ASP.NET MVC 4, tiene una gran flexibilidad en términos de separar la capa de servicio de los controladores permitiendo utilizar varios de los frameworks de Inyección de dependencia disponibles con bastante facilidad.

Todos los fragmentos de código y código de ejemplo se incluyen en el Kit de formación de Web Camps, disponible en https://github.com/Microsoft-Web/WebCampTrainingKit/releases.

Objetivos

En este laboratorio práctico, aprenderá a:

  • Implementar una RESTful Web API
  • Llamar a la API desde un cliente HTML

Requisitos previos

Se requiere lo siguiente para completar este laboratorio práctico:

Configuración

Instalación de fragmentos de código

Para mayor comodidad, gran parte del código que va a administrar a lo largo de este laboratorio está disponible como fragmentos de código de Visual Studio. Para instalar los fragmentos de código, ejecute archivo.\Source\Setup\CodeSnippets.vsi.

Si no está familiarizado con los fragmentos de Visual Studio Code y desea aprender a utilizarlos, puede consultar el apéndice de este documento "Apéndice A: utilización de fragmentos de código".

Ejercicios

Este laboratorio práctico incluye el siguiente ejercicio:

  1. Ejercicio 1: crear una Web API de solo lectura
  2. Ejercicio 2: crear una Web API de lectura/escritura
  3. Ejercicio 3: consumir la Web API desde un cliente HTML

Nota:

Cada ejercicio va acompañado de una carpeta final que contiene la solución resultante que debería obtener tras completar los ejercicios. Puede utilizar esta solución como guía si necesita ayuda adicional para realizar los ejercicios.

Tiempo estimado para completar este laboratorio: 60 minutos.

Ejercicio 1: crear una Web API de solo lectura

En este ejercicio, implementará los métodos GET de solo lectura para el administrador de contactos.

Tarea 1: creación del proyecto API

En esta tarea, utilizará las nuevas plantillas de proyecto web ASP.NET para crear una aplicación web de Web API.

  1. Ejecute Visual Studio 2012 Express para la Web, para ello vaya a Inicio y escriba VS Express para Web y presione Intro.

  2. En el menú Archivo, seleccione Nuevo proyecto. Seleccione el tipo de proyecto Visual C# | Web en la vista de árbol de tipos de proyecto, y luego seleccione el tipo de proyecto Aplicación Web ASP.NET MVC 4. Establezca el Nombre del proyecto como ContactManager y el Nombre de la solución como Begin, luego haga clic en Aceptar.

    Creating a new ASP.NET MVC 4.0 Web Application Project

    Creación de un nuevo proyecto de aplicación web ASP.NET MVC 4.0

  3. En el cuadro de diálogo de tipo de proyecto ASP.NET MVC 4, seleccione el tipo de proyecto Web API. Haga clic en OK.

    Specifying the Web API project type

    Especificación del tipo de proyecto de Web API

Tarea 2: crear los controladores de la API de Contact Manager

En esta tarea, creará las clases de controlador en las que residirán los métodos de la API.

  1. Elimine el archivo ValuesController.cs de la carpeta de Controladores del proyecto.

  2. Haga clic con el botón derecho del mouse en la carpeta Controladores del proyecto y seleccione Agregar | Controlador en el menú contextual.

    Adding a new controller to the project

    Agregar un nuevo controlador al proyecto

  3. En el cuadro de diálogo Agregar controlador que aparece, seleccione Controlador API vacío en el menú Plantilla. Nombre la clase de controlador ContactController. A continuación, haga clic en Agregar.

    Using the Add Controller dialog to create a new Web API controller

    Uso del cuadro de diálogo Agregar controlador para crear un nuevo controlador de Web API

  4. Agregue el siguiente código al ContactController.

    (Fragmento de código - Web API Lab - Ex01 - Método Get API)

    public string[] Get()
    {
        return new string[]
        {
            "Hello",
            "World"
        };
    }
    
  5. Presione F5 para depurar la aplicación. Debería aparecer la página de inicio predeterminada de un proyecto de Web API.

    The default home page of an ASP.NET Web API application

    La página de inicio por defecto de una aplicación ASP.NET Web API

  6. En la ventana de Internet Explorer, pulse la tecla F12 para abrir la ventana Herramientas de desarrollo. Haga clic en la pestaña Red, y luego en el botón Iniciar captura para comenzar a capturar el tráfico de red en la ventana.

    Opening the network tab and initiating network capture

    Abrir la pestaña de red e iniciar la captura de red

  7. Agregue /api/contact a la URL de la barra de direcciones del navegador y pulse Intro. Los detalles de la transmisión aparecerán en la ventana de captura de red. Tenga en cuenta que el tipo MIME de la respuesta es application/json. Esto demuestra cómo el formato de salida por defecto es JSON.

    Viewing the output of the Web API request in the Network view

    Visualización de la salida de la solicitud de la Web API en la vista de red

    Nota:

    El comportamiento predeterminado de Internet Explorer 10 en este punto será preguntar si el usuario desea guardar o abrir el flujo resultante de la llamada a la Web API. La salida será un archivo de texto que contendrá el resultado JSON de la llamada a la URL de la Web API. No cancele el diálogo para poder ver el contenido de la respuesta a través de la ventana de la Herramienta de desarrollo.

  8. Haga clic en el botón Ir a vista detallada para ver más detalles sobre la respuesta de esta llamada a la API.

    Switch to Detailed View

    Cambiar a vista detallada

  9. Haga clic en la pestaña Cuerpo de la respuesta para ver el texto de la respuesta JSON real.

    Viewing the JSON output text in the network monitor

    Visualización del texto de salida JSON en el monitor de red

Tarea 3: crear los modelos de contacto y aumentar el controlador de contactos

En esta tarea, creará las clases de controlador en las que residirán los métodos de la API.

  1. Haga clic con el botón derecho del mouse en la carpeta Modelos y seleccione Agregar | Clase... en el menú contextual.

    Adding a new model to the web application

    Agregar un nuevo modelo a la aplicación web

  2. En el cuadro de diálogo Agregar nuevo elemento, nombre el nuevo archivo Contact.cs y haga clic en Agregar.

    Creating the new Contact class file

    Creación del nuevo archivo de clase Contacto

  3. Agregue el siguiente código resaltado a la clase Contacto.

    (Fragmento de código - Web API Lab - Ex01 - Clase Contacto)

    public class Contact
    {
        public int Id { get; set; }
    
        public string Name { get; set; }
    }
    
  4. En la clase ContactController, seleccione la palabra cadena en la definición del método Obtener, y escriba la palabra Contacto. Una vez introducida la palabra, aparecerá un indicador al principio de la palabra Contacto. Mantenga pulsada la tecla Ctrly pulse la tecla punto (.) o haga clic en el icono con el mouse para abrir el cuadro de diálogo de ayuda en el editor de código, para rellenar automáticamente la directiva uso para el espacio de nombres Modelos.

    Using Intellisense assistance for namespace declarations

    Uso de la ayuda Intellisense para las declaraciones de espacios de nombres

  5. Modifique el código del método Obtener para que devuelva una matriz de instancias del modelo Contacto.

    (Fragmento de código - Web API Lab - Ex01 - Devolución de una lista de contactos)

    public Contact[] Get()
    {
        return new Contact[]
        {
            new Contact
            {
                Id = 1,
                Name = "Glenn Block"
            },
            new Contact
            {
                Id = 2,
                Name = "Dan Roth"
            }
        };
    }
    
  6. Presione F5 para depurar la aplicación web en el navegador. Para ver los cambios realizados en la salida de respuesta de la API, realice los siguientes pasos.

    1. Una vez abierto el navegador, presione F12 si las herramientas de desarrollo aún no están abiertas.

    2. Haz clic en la pestaña Red.

    3. Presione el botón Iniciar captura.

    4. Agregue el sufijo URL /api/contact a la URL en la barra de direcciones y presione la tecla Intro.

    5. Presione el botón Ir a vista detallada.

    6. Seleccione la pestaña Cuerpo de la respuesta. Debería ver una cadena JSON que representa la forma serializada de una matriz de instancias de Contacto.

      JSON serialized output of a complex Web API method call

      Salida serializada JSON de una llamada a un método complejo de la Web API

Tarea 4: extracción de funcionalidades en una capa de servicio

Esta tarea demostrará cómo extraer funcionalidad en una capa de Servicio para facilitar a los desarrolladores la separación de su funcionalidad de servicio de la capa de controlador, permitiendo así la reutilización de los servicios que realmente hacen el trabajo.

  1. Cree una nueva carpeta en la raíz de la solución y nómbrela Servicios. Para ello, haga clic con el botón derecho en el proyecto ContactManager, seleccione Agregar | Nueva carpeta, nómbrela Servicios.

    Creating Services folder

    Creación de la carpeta Servicios

  2. Haga clic con el botón derecho en la carpeta Servicios y seleccione Agregar | Clase... en el menú contextual.

    Adding a new class to the Services folder

    Agregar una nueva clase a la carpeta Servicios

  3. Cuando aparezca el cuadro de diálogo Agregar nuevo elemento, asigne a la nueva clase el nombre ContactRepository y haga clic en Agregar.

    Creating a class file to contain the code for the Contact Repository service layer

    Creación de un archivo de clase que contenga el código de la capa de servicio Repositorio de contactos

  4. Agregue una directiva de uso al archivo ContactRepository.cs para incluir el espacio de nombres de los modelos.

    using ContactManager.Models;
    
  5. Agregue el siguiente código resaltado al archivo ContactRepository.cs para implementar el método GetAllContacts.

    (Fragmento de código - Web API Lab - Ex01 - Repositorio de contactos)

    public class ContactRepository
    {
        public Contact[] GetAllContacts()
        {
            return new Contact[]
            {
                new Contact
                {
                    Id = 1,
                    Name = "Glenn Block"
                },
                new Contact
                {
                    Id = 2,
                    Name = "Dan Roth"
                }
            };
        }
    }
    
  6. Abra el archivo ContactController.cs si aún no lo está.

  7. Agregue la siguiente sentencia de uso a la sección de declaración del espacio de nombres del archivo.

    using ContactManager.Services;
    
  8. Agregue el siguiente código resaltado a la clase ContactController.cs para agregar un campo privado que represente la instancia del repositorio, de modo que el resto de los miembros de la clase puedan hacer uso de la implementación del servicio.

    (Fragmento de código - Web API Lab - Ex01 - Controlador de contacto)

    public class ContactController : ApiController
    {
        private ContactRepository contactRepository;
    
        public ContactController()
        {
            this.contactRepository = new ContactRepository();
        } 
        ...
    }
    
  9. Cambie el método Obtener para que utilice el servicio de repositorio de contactos.

    (Fragmento de código - Web API Lab - Ex01 - Devolución de una lista de contactos a través del repositorio)

    public Contact[] Get()
    {
        return contactRepository.GetAllContacts();
    }
    
  10. Ponga un punto de interrupción en la definición del ContactController del método Obtener.

Adding breakpoints to the contact controller

Agregar puntos de interrupción al controlador de contacto 11. Presione F5 para ejecutar la aplicación. 12. Cuando se abra el navegador, presione F12 para abrir las herramientas de desarrollo. 13. Haga clic en la pestaña Red. 14. Haga clic en el botón Iniciar captura. 15. Agregue a la URL de la barra de direcciones el sufijo /api/contact y presione Intro para cargar el controlador de la API. 16. Visual Studio 2012 debe romper una vez que el método Obtener comienza la ejecución.

Breaking within the Get method

Cambio en el método Obtener 17. Presione F5 para continuar. 18. Vuelva a Internet Explorer si no está ya enfocado. Observe la ventana de captura de red.

Network view in Internet Explorer showing results of the Web API call

Vista de red en Internet Explorer mostrando los resultados de la llamada a la Web API 19. Haga clic en el botón Ir a la vista detallada. 20. Haga clic en la pestaña Cuerpo de la respuesta. Observe la salida JSON de la llamada a la API y cómo representa los dos contactos recuperados por la capa de servicio.

Viewing the JSON output from the Web API in the developer tools window

Visualización de la salida JSON de la Web API en la ventana de herramientas para desarrolladores

Ejercicio 2: crear una Web API de lectura/escritura

En este ejercicio, implementará métodos POST y PUT para el administrador de contactos para habilitarlo con funciones de edición de datos.

Tarea 1: abrir el proyecto Web API

En esta tarea, se preparará para mejorar el proyecto Web API creado en el Ejercicio 1 para que pueda aceptar entradas de usuario.

  1. Ejecute Visual Studio 2012 Express para la Web, para ello vaya a Inicio y escriba VS Express para Web y presione Intro.

  2. Abra la solución Begin ubicada en la carpeta Source/Ex02-ReadWriteWebAPI/Begin/ folder. De lo contrario, puede seguir utilizando la solución Final obtenida al completar el ejercicio anterior.

    1. Si abrió la solución Begin proporcionada, deberá descargar algunos paquetes NuGet que faltan antes de continuar. Para ello, haga clic en el menú Proyecto y seleccione Administrar paquetes NuGet.

    2. En el cuadro de diálogo Administrar paquetes NuGet, haga clic en Restaurar para descargar los paquetes que faltan.

    3. Por último, para compilar la solución, haga clic en Compilar | solución de compilación.

      Nota:

      Una de las ventajas de usar NuGet es que no es necesario enviar todas las bibliotecas del proyecto, lo que reduce el tamaño del proyecto. Con NuGet Power Tools, especificando las versiones del paquete en el archivo Packages.config, podrá descargar todas las bibliotecas necesarias la primera vez que ejecute el proyecto. Por ello, tendrá que ejecutar estos pasos después de abrir una solución existente de este laboratorio.

  3. Abra el archivo Services/ContactRepository.cs.

Tarea 2: agregar funciones de persistencia de datos a la implementación del repositorio de contactos

En esta tarea, aumentará la clase ContactRepository del proyecto Web API creado en el Ejercicio 1 para que pueda persistir y aceptar entradas de usuario y nuevas instancias de Contacto.

  1. Agregue la siguiente constante a la clase ContactRepository para representar el nombre de la clave del elemento de caché del servidor web más adelante en este ejercicio.

    private const string CacheKey = "ContactStore";
    
  2. Agregue un constructor al ContactRepository que contenga el siguiente código.

    (Fragmento de código - Web API Lab - Ex02 - Constructor de repositorio de contactos)

    public ContactRepository()
    {
        var ctx = HttpContext.Current;
    
        if (ctx != null)
        {
            if (ctx.Cache[CacheKey] == null)
            {
                var contacts = new Contact[]
                {
                    new Contact
                    {
                        Id = 1, Name = "Glenn Block"
                    },
                    new Contact
                    {
                        Id = 2, Name = "Dan Roth"
                    }
                };
    
                ctx.Cache[CacheKey] = contacts;
            }
        }
    }
    
  3. Modifique el código del método GetAllContacts como se muestra a continuación.

    (Fragmento de código - Web API Lab - Ex02 - Obtener todos los contactos)

    public Contact[] GetAllContacts()
    {
        var ctx = HttpContext.Current;
    
        if (ctx != null)
        {
            return (Contact[])ctx.Cache[CacheKey];
        }
    
        return new Contact[]
            {
                new Contact
                {
                    Id = 0,
                    Name = "Placeholder"
                }
            };
    }
    

    Nota:

    Este ejemplo es para fines de demostración y utilizará la caché del servidor web como medio de almacenamiento, de modo que los valores estarán disponibles para múltiples clientes simultáneamente, en lugar de utilizar un mecanismo de almacenamiento de Sesión o un tiempo de vida de almacenamiento de Solicitud. Se podría utilizar Entity Framework, almacenamiento XML o cualquier otra variedad en lugar de la caché del servidor web.

  4. Implementa un nuevo método llamado SaveContact a la clase ContactRepository para hacer el trabajo de guardar un contacto. El método SaveContact debe tomar un único parámetro Contacto y devolver un valor booleano que indica éxito o fracaso.

    (Fragmento de código - Web API Lab - Ex02 - Implementación del método SaveContact)

    public bool SaveContact(Contact contact)
    {
        var ctx = HttpContext.Current;
    
        if (ctx != null)
        {
             try
             {
                  var currentData = ((Contact[])ctx.Cache[CacheKey]).ToList();
                  currentData.Add(contact);
                  ctx.Cache[CacheKey] = currentData.ToArray();
    
                  return true;
             }
             catch (Exception ex)
             {
                  Console.WriteLine(ex.ToString());
                  return false;
             }
        }
    
        return false;
    }
    

Ejercicio 3: consumir la Web API desde un cliente HTML

En este ejercicio, creará un cliente HTML para llamar a la Web API. Este cliente facilitará el intercambio de datos con la Web API utilizando JavaScript y mostrará los resultados en un navegador web utilizando marcado HTML.

Tarea 1: Modificación de la vista índice para proporcionar una interfaz gráfica de usuario que muestre los contactos

En esta tarea, modificará la vista Índice predeterminada de la aplicación web para cumplir el requisito de mostrar la lista de contactos existentes en un navegador HTML.

  1. Abra Visual Studio 2012 Express para la Web si aún no está abierto.

  2. Abra la solución Begin ubicada en la carpeta Source/Ex03-ConsumingWebAPI/Begin//. De lo contrario, puede seguir utilizando la solución Final obtenida al completar el ejercicio anterior.

    1. Si abrió la solución Begin proporcionada, deberá descargar algunos paquetes NuGet que faltan antes de continuar. Para ello, haga clic en el menú Proyecto y seleccione Administrar paquetes NuGet.

    2. En el cuadro de diálogo Administrar paquetes NuGet, haga clic en Restaurar para descargar los paquetes que faltan.

    3. Por último, para compilar la solución, haga clic en Compilar | solución de compilación.

      Nota:

      Una de las ventajas de usar NuGet es que no es necesario enviar todas las bibliotecas del proyecto, lo que reduce el tamaño del proyecto. Con NuGet Power Tools, especificando las versiones del paquete en el archivo Packages.config, podrá descargar todas las bibliotecas necesarias la primera vez que ejecute el proyecto. Por ello, tendrá que ejecutar estos pasos después de abrir una solución existente de este laboratorio.

  3. Abra el archivo Index.cshtml ubicado en la carpeta Vistas/Inicio.

  4. Reemplace el código HTML dentro del elemento div con cuerpo Id. para que se vea como el siguiente código.

    <div id="body">
        <ul id="contacts"></ul>
    </div>
    
  5. Agregue el siguiente código Javascript en la parte inferior del archivo para realizar la solicitud HTTP a la Web API.

    @section scripts{
    <script type="text/javascript">
    $(function()
    {
            $.getJSON('/api/contact', function(contactsJsonPayload)
            {
                $(contactsJsonPayload).each(function(i, item)
                {
                    $('#contacts').append('<li>' + item.Name + '</li>');
                });
            });
    });
    </script>
    }
    
  6. Abra el archivo ContactController.cs si aún no lo está.

  7. Coloque un punto de interrupción en el método Obtener de la clase ContactController.

    Placing a breakpoint on the Get method of the API controller

    Colocación de un punto de interrupción en el método Obtener del controlador API

  8. Presione F5 para ejecutar el proyecto. El navegador cargará el documento HTML.

    Nota:

    Asegúrese de que está navegando a la URL raíz de su aplicación.

  9. Una vez que la página se carga y el JavaScript se ejecuta, el punto de interrupción será golpeado y la ejecución del código se detendrá en el controlador.

    Debugging into the Web API calls using VS Express for Web

    Depuración de la llamada a la Web API mediante Visual Studio 2012 Express para Web

  10. Elimine el punto de interrupción y presione F5 o el botón Continuar de la barra de herramientas de depuración para continuar cargando la vista en el navegador. Una vez completada la llamada a la Web API, debería ver los contactos devueltos por la llamada a la Web API mostrados como elementos de la lista en el navegador.

    Results of the API call displayed in the browser as list items

    Resultados de la llamada a la API mostrados en el navegador como elementos de la lista

  11. Detenga la depuración.

Tarea 2: modificación de la vista índice para proporcionar una interfaz gráfica de usuario para la creación de contactos

En esta tarea, continuará modificando la vista Índice de la aplicación MVC. Se agregará un formulario a la página HTML que capturará la entrada del usuario y la enviará a la API Web para crear un nuevo Contacto, y se creará un nuevo método controlador de la API Web para recopilar los datos de la GUI.

  1. Abra el archivo ContactController.cs.

  2. Agregue un nuevo método a la clase del controlador llamado Publicar como se muestra en el siguiente código.

    (Fragmento de código: Laboratorio de API web - Ex03 - Método Publicar)

    public HttpResponseMessage Post(Contact contact)
    {
        this.contactRepository.SaveContact(contact);
    
        var response = Request.CreateResponse<Contact>(System.Net.HttpStatusCode.Created, contact);
    
        return response;
    }
    
  3. Abra el archivo Index.cshtml en Visual Studio si aún no está abierto.

  4. Agregue el siguiente código HTML al archivo justo después de la lista desordenada que agregó en la tarea anterior.

    <form id="saveContactForm" method="post">
    <h3>Create a new Contact</h3>
    <p>
        <label for="contactId">Contact Id:</label>
        <input type="text" name="Id" />
    </p>
    <p>
        <label for="contactName">Contact Name:</label>
        <input type="text" name="Name" />
    </p>
    <input type="button" id="saveContact" value="Save" />
    </form>
    
  5. En el elemento script de la parte inferior del documento, agregue el siguiente código resaltado para manejar los eventos de clic de botón, que enviará los datos a la Web API mediante una llamada HTTP POST.

    <script type="text/javascript">
    ... 
    $('#saveContact').click(function()
             {
                  $.post("api/contact",
                        $("#saveContactForm").serialize(),
                        function(value)
                        {
                             $('#contacts').append('<li>' + value.Name + '</li>');
                        },
                        "json"
                  );
             });
    </script>
    
  6. En ContactController.cs, coloque un punto de interrupción en el método Publicar.

  7. Presione F5 para ejecutar la aplicación en el navegador.

  8. Una vez cargada la página en el navegador, escriba un nuevo nombre e Id de contacto y presione el botón Guardar.

    The client HTML document loaded in the browser

    El documento HTML del cliente cargado en el navegador

  9. Cuando la ventana del depurador se rompe en el método Publicar, eche un vistazo a las propiedades del parámetro de contacto. Los valores deben coincidir con los datos introducidos en el formulario.

    The Contact object being sent to the Web API from the client

    El objeto Contacto que se envía a la Web API desde el cliente

  10. Recorra el método en el depurador hasta que se haya creado la variable de respuesta. Al inspeccionar en la ventana Locales en el depurador, verá que todas las propiedades se han establecido.

The response following creation in the debugger

La respuesta tras la creación en el depurador 11. Si presiona F5 o hace clic en Continuar en el depurador, la solicitud se completará. Una vez que vuelva al navegador, el nuevo contacto se habrá agregado a la lista de contactos almacenados por la implementación ContactRepository.

The browser reflects successful creation of the new contact instance

El navegador refleja la creación exitosa de la nueva instancia de contacto

Nota:

Además, puede implementar esta aplicación en Azure siguiendo el Apéndice C: publicación de una aplicación ASP.NET MVC 4 mediante Web Deploy.


Resumen

Este laboratorio le ha presentado el nuevo framework ASP.NET Web API y la implementación de API Web RESTful utilizando el framework. A partir de aquí, podría crear un nuevo repositorio que facilite la persistencia de datos utilizando cualquier número de mecanismos y cablear ese servicio en lugar del simple proporcionado como ejemplo en este laboratorio. Web API admite una serie de características adicionales, como permitir la comunicación desde clientes no HTML escritos en cualquier lenguaje que admita HTTP y JSON o XML. También es posible alojar una API web fuera de una aplicación web típica, así como crear formatos de serialización propios.

El sitio web de ASP.NET tiene un área dedicada al marco de la ASP.NET Web API en [https://asp.net/web-api](https://asp.net/web-api). Este sitio seguirá proporcionando información de última hora, ejemplos y noticias relacionadas con las API web, así que consúltelo con frecuencia si desea profundizar en el arte de crear Web API personalizadas disponibles para prácticamente cualquier dispositivo o marco de desarrollo.

Apéndice A: uso de fragmentos de código

Con los fragmentos de código, tendrá todo el código que necesite al alcance de la mano. El documento de laboratorio le indicará exactamente cuándo puede utilizarlos, como se muestra en la siguiente figura.

Using Visual Studio code snippets to insert code into your project

Usar fragmentos de código de Visual Studio para insertar código en el proyecto

Para agregar un fragmento de código mediante el teclado (solo C#)

  1. Coloque el cursor donde desea insertar el código.

  2. Empiece a escribir el nombre del fragmento de código (sin espacios o guiones).

  3. Vea como IntelliSense muestra los nombres de los fragmentos de código coincidentes.

  4. Seleccione el fragmento de código correcto (o siga escribiendo hasta seleccionar todo el nombre del fragmento).

  5. Presione la tecla Tab dos veces para insertar el fragmento de código en la ubicación del cursor.

    Start typing the snippet name

    Empezar a escribir el nombre del fragmento de código

    Press Tab to select the highlighted snippet

    Presione la tecla Tab para seleccionar el fragmento de código resaltado

    Press Tab again and the snippet will expand

    Presione la tecla Tab de nuevo y el fragmento de código se expandirá

Para agregar un fragmento de código con el mouse (C#, Visual Basic y XML)

  1. Haga clic con el botón derecho en el lugar donde desea insertar el fragmento de código.

  2. Seleccione Insertar fragmento de código seguido de Mis fragmentos de código.

  3. Seleccione el fragmento de código correspondiente de la lista haciendo clic en él.

    Right-click where you want to insert the code snippet and select Insert Snippet

    Haga clic con el botón derecho en el lugar donde desea insertar el fragmento de código y seleccione Insertar fragmento de código

    Pick the relevant snippet from the list, by clicking on it

    Seleccione el fragmento de código correspondiente de la lista, haciendo clic en él

Apéndice B: instalación de Visual Studio Express 2012 para Web

Puede instalar Microsoft Visual Studio Express 2012 para Web u otra versión "Express" mediante el Instalador de plataforma web de Microsoft . Las instrucciones siguientes le guían por los pasos necesarios para instalar Visual Studio Express 2012 para Web mediante Instalador de plataforma web de Microsoft.

  1. Vaya a [https://go.microsoft.com/?linkid=9810169](https://go.microsoft.com/?linkid=9810169). De forma alternativa, si ya tiene instalado el Instalador de la Plataforma Web, puede abrirlo y buscar el producto "Visual Studio Express 2012 para Web con Azure SDK ".

  2. Haga clic en Instalar ahora. Si no tiene Instalador de plataforma web se le redirigirá para descargarlo e instalarlo primero.

  3. Una vez que Instalador de plataforma web está abierto, haga clic en Instalar para iniciar la instalación.

    Install Visual Studio Express

    Instalar Visual Studio Express

  4. Lea todas las licencias y términos de los productos y haga clic en Acepto para continuar.

    Accepting the license terms

    Aceptar los términos de licencia

  5. Espere hasta que finalice el proceso de descarga e instalación.

    Installation progress

    Progreso de la instalación

  6. Cuando finalice la instalación, haga clic en Finalizar.

    Installation completed

    Instalación completada

  7. Haga clic en Salir para cerrar el Instalador de plataforma web.

  8. Para abrir Visual Studio Express para Web, vaya a la pantalla Inicio y escriba "VS Express ", luego haga clic en el icono VS Express para Web.

    VS Express for Web tile

    Icono de VS Express para Web

Apéndice C: publicación de una aplicación ASP.NET MVC 4 mediante Web Deploy

Este apéndice le mostrará cómo crear un nuevo sitio web desde el Portal Azure y publicar la aplicación que ha obtenido siguiendo el laboratorio, aprovechando la función de publicación de Web Deploy proporcionada por Azure.

Tarea 1: creación de un nuevo sitio web desde Azure Portal

  1. Vaya al Portal de administración de Azure e inicie sesión con las credenciales de Microsoft asociadas a la suscripción.

    Nota:

    Con Azure puede alojar 10 sitios web ASP.NET de forma gratuita y luego escalar a medida que crece su tráfico. Puede registrarse aquí.

    Log on to Windows Azure portal

    iniciar sesión en el portal

  2. Haga clic en Nuevo en la barra de comandos.

    Creating a new Web Site

    Crear un nuevo sitio web

  3. Haga clic en Proceso | Sitio web. A continuación, seleccione opción Creación rápida. Proporcione una dirección URL disponible para el nuevo sitio web y haga clic en Crear sitio web.

    Nota:

    Azure es el host de una aplicación web que se ejecuta en la nube que puede controlar y administrar. La opción Creación rápida permite implementar una aplicación web completada en Azure desde fuera del portal. No incluye pasos para configurar una base de datos.

    Creating a new Web Site using Quick Create

    Crear un nuevo sitio web mediante la Creación rápida

  4. Espere hasta que se cree el nuevo Sitio web.

  5. Una vez creado el sitio web, haga clic en el vínculo de la columna URL. Compruebe que el nuevo sitio web funciona.

    Browsing to the new web site

    Exploración a la nueva aplicación web

    Web site running

    Sitio web que ejecuta

  6. Vuelva al portal y haga clic en el nombre del sitio web bajo la columna Nombre para mostrar las páginas de administración.

    Opening the web site management pages

    Abrir las páginas de administración del sitio web

  7. En la página Panel, en la sección de vista rápida, haga clic en el vínculo Descargar perfil de publicación.

    Nota:

    El perfil de publicación contiene toda la información necesaria para publicar una aplicación web en un Azure para cada método de publicación habilitado. El perfil de publicación contiene las URL, las credenciales de usuario y las cadenas de base de datos necesarias para conectarse y autenticarse en cada uno de los puntos de conexión para los que se ha habilitado un método de publicación. Microsoft WebMatrix 2, Microsoft Visual Studio Express para Web y Microsoft Visual Studio 2012 admiten la lectura de perfiles de publicación para automatizar la configuración de estos programas para publicar aplicaciones web en Azure.

    Downloading the web site publish profile

    Descargar el perfil de publicación del sitio web

  8. Descargue el archivo de perfil de publicación en una ubicación conocida. Además, en este ejercicio verá cómo usar este archivo para publicar una aplicación web en Azure desde Visual Studio.

    Saving the publish profile file

    Guardar el archivo de perfil de publicación

Tarea 2: configuración del servidor de bases de datos

Si la aplicación usa bases de datos de SQL Server, deberá crear un servidor de la Bases de datos SQL. Si desea implementar una aplicación sencilla que no use SQL Server, puede omitir esta tarea.

  1. Necesitará un servidor de Bases de datos SQL para almacenar la base de datos de la aplicación. Puede ver los servidores de Bases de datos SQL desde la suscripción en el Portal de administración de Azure en Bases de datos SQL | Servidores | Panel de servidor. Si no tiene un servidor creado, puede crear uno mediante el botón Agregar de la barra de comandos. Tome nota del nombre y la dirección URL del servidor , el nombre de inicio de sesión de administrador y la contraseña, ya que los usará en las tareas siguientes. Aún no cree la base de datos, ya que se creará en una fase posterior.

    SQL Database Server Dashboard

    Panel de Servidor de Bases de datos SQL

  2. En la siguiente tarea probará la conexión a la base de datos desde Visual Studio, para ello deberá incluir su dirección IP local en la lista de Direcciones IP permitidas del servidor. Para ello, haga clic en Configurar, seleccione la dirección IP de dirección IP del cliente actual y péguela en el Dirección IP de inicio y los cuadros de texto Dirección IP final y haga clic en el botón add-client-ip-address-ok-button.

    Adding Client IP Address

    Adición de la dirección IP del cliente

  3. Una vez agregada la Dirección IP del cliente a la lista de direcciones IP permitidas, haga clic en Guardar para confirmar los cambios.

    Confirm Changes

    Confirmar cambios

Tarea 3: publicación de una aplicación de ASP.NET MVC 4 mediante Web Deploy

  1. Vuelva a la solución ASP.NET MVC 4. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto de sitio web y seleccione Publicar.

    Publishing the Application

    Publicación del sitio web

  2. Importe el perfil de publicación que guardó en la primera tarea.

    Importing the publish profile

    Importación del perfil de publicación

  3. Haga clic en Validar conexión. Una vez completada la validación, haga clic en Siguiente.

    Nota:

    La validación se habrá completado cuando aparezca una marca de verificación verde junto al botón Validar conexión.

    Validating connection

    Validar conexión

  4. En la página Configuración, en la sección Bases de datos, haga clic en el botón situado junto al cuadro de texto de la conexión de base de datos (es decir, DefaultConnection).

    Web deploy configuration

    Configuración de Web Deploy

  5. Configure la conexión de base de datos de la siguiente manera:

    • En Nombre del servidor, escriba la dirección URL del servidor SQL Database con el prefijo tcp:.

    • En Nombre de usuario escriba su nombre de usuario de administrador del servidor.

    • En Contraseña escriba su contraseña de administrador del servidor.

    • Escriba un nuevo nombre para la base de datos, por ejemplo MVC4SampleDB.

      Configuring destination connection string

      Configuración de la cadena de conexión de destino

  6. A continuación, haga clic en Aceptar. Cuando se le pida que cree la base de datos, haga clic en .

    Creating the database

    Creación de la base de datos

  7. La cadena de conexión que utilizará para conectarse a la Base de datos SQL en Windows Azure se muestra en el cuadro de texto Conexión predeterminada. A continuación, haga clic en Siguiente.

    Connection string pointing to SQL Database

    Cadena de conexión que apunta a la Base de datos SQL

  8. En la página Versión preliminar, haga clic en Publicar.

    Publishing the web application

    Publicación de la aplicación web

  9. Una vez finalizado el proceso de publicación, el explorador predeterminado abrirá el sitio web publicado.

    Application published to Windows Azure

    Aplicación publicada en Azure