This document summarizes a presentation on ASP.NET Web API given by Pedro Félix. The presentation introduced ASP.NET Web API, describing its programming model based on HTTP and focus on building APIs exposed via the web. It also covered the architectural components involved, including routing, controllers, request/response handling, and extensibility points.
3. Pedro Félix
Professor no ISEL e membro do CCISEL
Docente no PROMPT - http://prompt.cc.isel.ipl.pt/
Programa Avançado em Métodos de Programação e Tecnologia
Consultor independente
Rupeal
SAPO – Service Delivery Broker
Membro do Web API Advisory Board
4. Sumário
• Enquadramento e objectivos
• Modelo de programação
• Arquitectura de processamento
• Extensibilidade
5. ASP.NET Web API
• Application Programming Interfaces
• Expostas na Web
• Usando o HTTP como protocolo aplicacional
• Accessíveis por variados tipos de cliente
– E.g. dispositivos móveis
6. ASP.NET Web API
Fonte: http://blog.programmableweb.com/2012/02/06/5000-apis-facebook-google-and-twitter-are-changing-the-web/
7. ASP.NET Web API
Fonte: http://www.hanselman.com/blog/VisualStudio11BetaInContext.aspx
8. ASP.NET Web API: Evolução
• 2010
– WCF Web API - Extensão ao WCF
– Preview 6
– Modelo de classes para o HTTP
• Feveiro de 2012
– ASP.NET Web Api Beta
– Modelo baseado em controladores
– Modelo de classes para o HTTP
– Próximos milestones: RC, RTM
9. Bases arquitecturais da Web
• Identificação
– URI
http://netponto.org/reuniao/27a-reuniao-presencial-da-comunidade-netponto-em-lisboa/
• Interacção
– HTTP, ...
• Representações e formatos
– text/html, application/xml, application/json, imag
e/png, audio/mpeg, application/atom+xml, …
14. Modelo de programação
HttpConfiguration e HttpRoute
var config = new HttpSelfHostConfiguration("http://localhost:8080");
config.Routes.MapHttpRoute(
"default",
"{controller}/{id}",
new {controller = "home", id = RouteParameter.Optional});
HttpServer, HttpSelfHostServer, ...
var server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
16. Modelo de programação
• Controller representa uma família de recursos
• Actions estão associadas a métodos HTTP
– Get() - GET sobre /resource
– Get(int id) - GET sobre /resource/123
– Post(...) - POST sobre /resource/
• No MVC, as actions estão associadas a
subconjuntos de recursos
– Detail(int id) – GET sobre /resource/detail/123
– Delete(int id) – POST sobre /resource/delete/123
17. Modelo de programação
ApiController
public abstract class ApiController : IHttpController, IDisposable
{
public HttpConfiguration Configuration { get; set; }
public HttpRequestMessage Request { get; set; }
public UrlHelper Url { get; }
...
}
public interface IHttpController
{
Task<HttpResponseMessage> ExecuteAsync(
HttpControllerContext controllerContext,
CancellationToken cancellationToken);
}
18. Modelo de programação
HttpRequestMessage e HttpResponseMessage
var userAgent = Request.Headers.UserAgent.Count != 0 ?
Request.Headers.UserAgent.First().Product.Name
: "stranger";
return new HttpResponseMessage()
{
Content = new StringContent("Hello there, "+userAgent)
};
19. Modelo de programação
• HttpConfiguration
– HttpRouteCollection
• HttpServer
– HttpSelfHostServer, ...
• ApiController
– Acções associadas a métodos HTTP (GET, POST, PUT, DELETE, ...)
• HttpRequestMessage e HttpResponseMessage
32. Memory hosting
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
"default",
"{controller}/{id}",
new { controller = "home",
id = RouteParameter.Optional });
var server = new HttpServer(config);
var client = new HttpClient(server);
var resp = client
.GetAsync("http://does.not.matter/hello")
.Result;
41. WCF e ASP.NET Web API
• WCF
– Baseado nos modelos do SOAP e do WSDL
– Independência do transporte – HTTP é uma opção
– HTTP é apenas uma opção de transporte
• ASP.NET Web API programming model
– Baseado no modelo da Web (URIs, HTTP, formatos)
– HTTP usado como protocolo aplicacional
42. MVC e Web API
• MVC
– Ênfase na produção de HTML
– Modelo antigo de classes para o HTTP – HttpContext
– Actions
• Web API
– Independência do formato
– Novo modelo de classes para o HTTP
– Métodos HTTP (GET, POST, PUT, ...)
• Não existe razão para a diferença!
43. Notas finais
• Relevância actual das Web API
• HTTP como protocolo aplicacional
• Múltiplos formatos
– HTML é apenas mais um
• Modelo de classes para o HTTP no .NET 4.5
– Cliente e servidor
– Pedidos e respostas, handling, formatters
• Modelo no servidor baseado em controllers
45. Referências
Pedro Félix’s shared memory
– http://pfelix.wordpress.com/
Código fonte
– https://github.com/pmhsfelix/presentation-netponto-webapi
– https://github.com/pmhsfelix/WebApi.Explorations.ServiceBusRelayHost
GitHub WebApiContrib
– https://github.com/webapicontrib
Getting Started with ASP.NET Web API
– http://www.asp.net/web-api
47. Próximas reuniões presenciais
• 24/03/2012 – Março
• 14/04/2012 – Abril (Porto)
• 21/04/2012 – Abril
• 26/05/2012 – Maio
Reserva estes dias na agenda! :)