Introducción a ASP.NET Core Web API
La historia de este post es más o menos así :en el trabajo realizábamos una reescritura de una aplicación realizada originalmente con ASP.NET WebForms a ASP.NET Core 2.2 MVC y nos dimos cuenta que muchos de nuestros controladores regresaban unicamente JSON o algunas vistas solo regresaban un fragmento HTML con un div
donde pintaríamos la interfaz gráfica con Javascript. Por lo que tener una web API hacia mucho más sentido. De aquí surgió mi interés por las Web API.
Cuando era un neófito en ASP.NET Core decidí aprender MVC e ignorar todo lo demás (Web APIs, Razor Pages y Blazor) esto simplemente por la falta de tiempo y considerando el patrón MVC esta por demás bien establecido lleva bastante tiempo funcionando bien. Asi que este articulo sera donde coloque todo lo que considere pertinente para mi aprendizaje.
“API are powered the world”
Como consumir una web API desde ASP.NET Core
Lo primero que vamos a hacer mostrarte como consumir un web API desde una aplicación ASP.NET Core MVC. Para consumir servicios web en .NET Core existe la clase HttpClient
que puede utilizarse casi desde cualquier tipo de proyecto en .NET.
La clase HttpClient
se ha usado principalmente con dos patrones : dentro de un bloque using
y como miembro estático de una clase pero es importante recalcar que hay dos problemas conocidos con esta clase : y por lo que usaremos los métodos que agregan esta clase usando inyección de dependencias.
Consumiremos el API de Github y trataremos de hacer un clon de la interfaz de usuario de Github que muestra los detalles del usuario y los repositorios
En un proyecto MVC coloca el siguiente código en el método ConfigureServices
la clase Startup
services.AddHttpClient("Github", client => {
client.BaseAddress = new Uri("https://api.github.com");
client.DefaultRequestHeaders.Add("User-Agent", "aspnetcoremaster.com");
});
Con esto ya tenemos disponible el HttpClientFactory
en el contenedor de dependencias lo que nos permite instanciar nuestro cliente HTTP.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using IntroWebApi.Models;
using System.Net.Http;
using System.Text.Json;
namespace IntroWebApi.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IHttpClientFactory _clientFactory;
public HomeController(ILogger<HomeController> logger, IHttpClientFactory clientFactory)
{
_logger = logger;
_clientFactory = clientFactory;
}
public async Task<IActionResult> Index()
{
var request = new HttpRequestMessage(HttpMethod.Get,"users/jahbenjah");
var client = _clientFactory.CreateClient("Github");
var response = await client.SendAsync(request);
GithubUser user = new GithubUser();
if (response.IsSuccessStatusCode)
{
using var responseStream = await response.Content.ReadAsStreamAsync();
user = await JsonSerializer.DeserializeAsync<GithubUser>(responseStream);
}
else
{
}
return View(user);
}
}
}
Documentando nuestra API con Swagger
Para generar la documentación de nuestra API usando el estandar OpenApI Specification podemos usar el paquete de Nuget
Docker
Las imágenes de Docker necesarias para crear web API con ASP.NET Core 3.1 se encuentran en registro de contenedores de Microsoft mcr.microsoft.com/dotnet
Desplegar una aplicación web API en Azure
Desplegar una API con ASP.NET Core necesitas