Está en la página 1de 10

OPTATIVO IV- .

NET AVANZADO
UNIDAD 4
Introducción

HTTP no es solo para servir las páginas web. HTTP es también una plataforma
eficaz para la creación de las API que exponen datos y servicios. HTTP es sencillo, fle-
xible y ubicua. Casi cualquier plataforma que se puede considerar tiene una biblioteca
de HTTP, por lo que los servicios HTTP pueden llegar a una amplia gama de clientes,
incluidos los exploradores, dispositivos móviles y aplicaciones de escritorio tradiciona-
les.

ASP.NET Web API es un marco para la creación de web API sobre .NET Fra-
mework. En este tutorial, utilizará ASP.NET Web API para crear un sitio web de API
que devuelve una lista de productos.
Cree un proyecto de API Web

En este tutorial, utilizará ASP.NET Web API para crear un sitio web de API que
devuelve una lista de productos. La página de web front-end utiliza jQuery para mostrar
los resultados.

Inicie Visual Studio y seleccione nuevo proyecto desde el iniciar página. O


bien, en el archivo menú, seleccione New y, a continuación, proyecto.

En las plantillas panel, seleccione plantillas instaladas y expanda el Visual


C# nodo. En Visual C#, seleccione Web. En la lista de plantillas de proyecto, selec-
cione aplicación Web ASP.NET. Denomine el proyecto "ProductsApp" y haga clic
en Aceptar.
En el nuevo proyecto ASP.NET cuadro de diálogo, seleccione la vacía planti-
lla. En "agregar carpetas y principales referencias para", comprobar API Web. Haga
clic en Aceptar.

Agregar un modelo

Un modelo es un objeto que representa los datos de la aplicación. ASP.NET


Web API puede serializar automáticamente el modelo a algún otro formato, JSON o
XML y, a continuación, escribir los datos serializados en el cuerpo del mensaje de res-
puesta HTTP. Siempre que un cliente puede leer el formato de serialización, que se
puede deserializar el objeto. La mayoría de los clientes pueden analizar XML o
JSON. Además, el cliente puede indicar el formato que desee estableciendo el encabe-
zado Accept del mensaje de solicitud HTTP.

Empecemos por crear un modelo simple que representa un producto.

Si el Explorador de soluciones no está visible, haga clic en la vista menú y se-


leccione el Explorador de soluciones. En el Explorador de soluciones, haga clic en
la carpeta Models. En el menú contextual, seleccione agregar, a continuación, selec-
cione clase.

Nombre de la clase "producto". Agregue las siguientes propiedades para el Pro-


duct clase.

namespace ProductsApp.Models
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
}
Agregar un controlador

En la API de Web, un controlador es un objeto que controla las solicitudes


HTTP. Vamos a agregar un controlador que puede devolver una lista de productos o un
único producto especificado por identificador.

En el Explorador de soluciones, haga clic en la carpeta de controladores. Selec-


cione agregar y, a continuación, seleccione controlador.

En el agregar scaffolding cuadro de diálogo, seleccione controlador de API


de Web - vacío. Haga clic en Agregar.
En el Agregar controlador cuadro de diálogo, el nombre del controlador "Pro-
ductsController". Haga clic en Agregar.

La técnica scaffolding crea un archivo denominado ProductsController.cs en la


carpeta de controladores.

Si este archivo ya no está abierto, haga doble clic en el archivo para abrirlo. Re-
emplace el código de este archivo con lo siguiente:

using ProductsApp.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;

namespace ProductsApp.Controllers
{
public class ProductsController : ApiController
{
Product[] products = new Product[]
{
new Product { Id = 1, Name = "Tomato Soup", Category = "Grocer-
ies", Price = 1 },
new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price =
3.75M },
new Product { Id = 3, Name = "Hammer", Category = "Hardware",
Price = 16.99M }
};

public IEnumerable<Product> GetAllProducts()


{
return products;
}

public IHttpActionResult GetProduct(int id)


{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
}
}

Para simplificar el ejemplo, los productos se almacenan en una matriz fija dentro
de la clase de controlador. Por supuesto, en una aplicación real, podría consultar una
base de datos o utilizar algún otro origen de datos externo.

El controlador define dos métodos que devuelven productos:

 El GetAllProducts método devuelve la lista completa de productos como


un IEnumerable<producto> tipo.
 El GetProduct método busca un único producto por su identificador.

Ya está. Tiene una API web de trabajo. Cada método en el controlador corres-
ponde a uno o varios URI:
Método de controlador Identificador URI

GetAllProducts productos/api /

GetProduct /api/products/id

Para el GetProduct método, el identificador en el URI es un marcador de posi-


ción. Por ejemplo, para obtener el producto con el identificador de 5, el URI
es api/products/5 .

JSON

Al diseñar una aplicación que se comunicará con un equipo remoto, se debe se-
leccionar un protocolo para el formato e intercambio de los datos. Existe una variedad
de opciones abiertas y estandarizadas y la elección ideal depende de los requisitos de las
aplicaciones y de la funcionalidad preexistente. Por ejemplo, los servicios web basados
en SOAP dan formato a los datos en una carga XML contenida en una envoltura SOAP.

Aunque en muchos escenarios de aplicación XML funciona bien, presenta cier-


tos inconvenientes que hacen que no sea ideal. Las aplicaciones web de estilo Ajax son
un espacio en que XML no es ideal. Ajax es una técnica usada para crear aplicaciones
web interactivas que ofrecen una experiencia de usuario más ágil mediante el uso de lla-
madas al servidor web, livianas y fuera de banda, en lugar de devoluciones de página
completa. Estas llamadas asincrónicas se inician mediante Javascript en el cliente e im-
plican dar formato a los datos, enviarlos a un servidor web, analizar los datos devueltos
y trabajar con éstos. Aunque la mayoría de los exploradores pueden crear, enviar y ana-
lizar XML, JavaScript Object Notation (JSON) ofrece un formato estandarizado de in-
tercambio de datos más conveniente para aplicaciones web de estilo Ajax.

JSON es un formato de intercambio de datos abierto y basado en texto (consulte


la RFC 4627). Igual que XML, es legible e independiente de la plataforma, además de
tener a su disposición una amplia gama de implementaciones. Los datos con formato se-
gún el estándar JSON son ligeros y las implementaciones de JavaScript pueden anali-
zarlos sintácticamente con increíble facilidad, lo que lo convierte en el formato ideal de
intercambio de datos para aplicaciones web de Ajax. Puesto que JSON es ante todo un
formato de datos, no está limitado a las aplicaciones web de Ajax y prácticamente se
puede usar en cualquier escenario en que las aplicaciones necesiten intercambiar o al-
macenar información estructurada como texto.
Conceptos básicos de la notación literal en JavaScript

Los literales se usan en los lenguajes de programación para expresar literal-


mente valores fijos, como el valor entero constante 4 o la cadena "Hello, World". Los
literales se pueden usar en la mayoría de los lenguajes dondequiera que se permita una
expresión, como por ejemplo, en la parte de la condición de una instrucción de control,
en un parámetro de entrada cuando se llama a una función, en la asignación de varia-
bles, etc. Por ejemplo, el siguiente código en C# y Visual Basic inicializa la varia-
ble X con el valor entero constante 42.
int x = 42; // C#

Los distintos lenguajes de programación permiten tipos de literales diferentes.


La mayoría de los lenguajes de programación admiten, como mínimo, literales para ti-
pos escalares como por ejemplo enteros, números de punto flotante, cadenas y boolea-
nos. Lo interesante de JavaScript es que además de tipos escalares, admite también lite-
rales para tipos estructurados como matrices y objetos. Esta característica permite una
sintaxis concisa para la creación e inicialización de matrices y objetos a petición.

Los literales de matriz en JavaScript están compuestos de cero o más expresio-


nes, donde cada expresión representa un elemento de la matriz. Los elementos de la ma-
triz se encierran entre corchetes ([ ]) y se delimitan con comas. El siguiente ejemplo de-
fine literalmente una matriz con siete elementos de cadena que contienen los nombres
de los siete continentes:
var continents = ["Europe", "Asia", "Australia", "Antarctica", "North
America", "South America", "Africa"];
alert(continents[0] + " is one of the " + continents.length + "
continents.");

Ahora compárelo con la forma en que crearía e inicializaría una matriz en Ja-
vaScript sin la notación literal:
var continents = new Array();
continents[0] = "Europe";
continents[1] = "Asia";
continents[2] = "Australia";
continents[3] = "Antarctica";
continents[4] = "North America";
continents[5] = "South America";
continents[6] = "Africa";

Un objeto literal define los miembros de un objeto y sus valores. La lista de


miembros y valores del objeto se encierran entre llaves ({}) y cada miembro está delimi-
tado por una coma. Dentro de cada miembro, el nombre y el valor se delimitan con dos
puntos (:). En el ejemplo siguiente se crea un objeto y se inicializa con tres miembros
denominados Address, City y PostalCode con sus respectivos valores "123 Anywhere
St.","Springfield" y "99999".
var mailingAddress = {
"Address" : "123 Anywhere St.",
"City" : "Springfield",
"PostalCode" : 99999
};
alert("The package will be shipped to postal code " +
mailingAddress.PostalCode);

Los ejemplos presentados hasta ahora ilustran el uso de literales de cadena y nu-
méricos dentro de literales de matriz y de objeto. También se puede expresar un gráfico
completo mediante uso recursivo de la notación, de manera tal que los valores de los
elementos de matriz y de miembros de objetos puedan, a su vez, usar literales de objetos
y de matriz. Por ejemplo, el siguiente fragmento de código ilustra un objeto que tiene
una matriz como miembro (PhoneNumbers), donde la matriz está compuesta por una
lista de objetos.
var contact = {
"Name": "John Doe",
"PermissionToCall": true,
"PhoneNumbers": [
{
"Location": "Home",
"Number": "555-555-1234"
},
{
"Location": "Work",
"Number": "555-555-9999 Ext. 123"
}
]
};
if (contact.PermissionToCall)
{
alert("Call " + contact.Name + " at " + contact.PhoneNumbers[0].Number);
}
Bibliografía
- Jay Hilyard, Stephen Teilhet. (). C# 3.0 Cookbook, Third Edition: More than 250
solutions for C# 3.0 programmers. O'Reilly Media

- Troelsen, A., & Japikse, P. (2015). C# 6.0 And The .NET 4.6 Framework, 7th
Edition. Washington: Apress.

También podría gustarte