uma introdução a asp.net web api
DESCRIPTION
Apresentação do Pedro Félix sobre ASP .NET Web API na 27a Reunião Presencial da Comunidade NetPonto em Lisboa (http://netponto.org).TRANSCRIPT
Uma Introdução à ASP.NET Web APIPedro Félix
http://netponto.org27ª Reunião Lisboa - 24/03/2012
Patrocinador "GOLD"
Pedro FélixProfessor no ISEL e membro do CCISELDocente no PROMPT - http://prompt.cc.isel.ipl.pt/
Programa Avançado em Métodos de Programação e Tecnologia
Consultor independenteRupealSAPO – Service Delivery Broker
Membro do Web API Advisory Board
Sumário
• Enquadramento e objectivos• Modelo de programação• Arquitectura de processamento• Extensibilidade
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
ASP.NET Web API
Fonte: http://blog.programmableweb.com/2012/02/06/5000-apis-facebook-google-and-twitter-are-changing-the-web/
ASP.NET Web API
Fonte: http://www.hanselman.com/blog/VisualStudio11BetaInContext.aspx
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
Bases arquitecturais da Web
• Identificação– URIhttp://netponto.org/reuniao/27a-reuniao-presencial-da-comunidade-netponto-em-lisboa/
• Interacção– HTTP, ...
• Representações e formatos– text/html, application/xml, application/json, image/png, audio/mpeg, application/atom+xml, …
HTTP
Modelo de Programação
demonstração
Distribuição - pacotes NuGet
Dependências
System.Json
System.Net.Http.*
System.Web.Http.*
Modelo de programação
var config = new HttpSelfHostConfiguration("http://localhost:8080");
config.Routes.MapHttpRoute( "default", "{controller}/{id}", new {controller = "home", id = RouteParameter.Optional});
var server = new HttpSelfHostServer(config);server.OpenAsync().Wait();
HttpConfiguration e HttpRoute
HttpServer, HttpSelfHostServer, ...
Modelo de programação
public class HomeController : ApiController { public HttpResponseMessage Get() {
...}
}
ApiController e actions
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
Modelo de programaçãopublic abstract class ApiController : IHttpController, IDisposable{ public HttpConfiguration Configuration { get; set; } public HttpRequestMessage Request { get; set; } public UrlHelper Url { get; } ...}
ApiController
public interface IHttpController{ Task<HttpResponseMessage> ExecuteAsync( HttpControllerContext controllerContext, CancellationToken cancellationToken);}
Modelo de programação
var userAgent = Request.Headers.UserAgent.Count != 0 ? Request.Headers.UserAgent.First().Product.Name : "stranger";
return new HttpResponseMessage() { Content = new StringContent("Hello there, "+userAgent) };
HttpRequestMessage e HttpResponseMessage
Modelo de programação• HttpConfiguration– HttpRouteCollection
• HttpServer– HttpSelfHostServer, ...
• ApiController– Acções associadas a métodos HTTP (GET, POST, PUT, DELETE, ...)
• HttpRequestMessage e HttpResponseMessage
HTTP: modelo de classes
Handler: Request Response
Handler Pipeline
HttpRequestMessage
HttpResponseMessage
DelegatingHandler HttpMessageHandlerInnerHander
Handler Pipeline
Handler Handler
Handler Handler
HttpClient
demonstração
Código-fonte disponível em:https://github.com/pmhsfelix/presentation-netponto-webapi
HttpClient
HttpClient e handlers
HttpClient e handlers
DelegatingHandler(e.g. Caching)
HttpClientHandlerInnerHander
HttpClient
Arquitectura de processamento
Web/ASP.NET Hosting
ASP.NET Web Hosting
demonstração
Código-fonte disponível em:https://github.com/pmhsfelix/presentation-netponto-webapi
Self-hosting
Memory hostingvar 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;
Media type formatting
Stream
media-type
CLR Type
Media Type Formatter
demonstração
Código-fonte disponível em:https://github.com/pmhsfelix/presentation-netponto-webapi
Arquitectura de processamento
Handler Pipeline
Handler Handler
Handler Handler
Message Handler
demonstração
Código-fonte disponível em:https://github.com/pmhsfelix/presentation-netponto-webapi
Arquitectura de processamento
Controller Factory
demonstração
Código-fonte disponível em:https://github.com/pmhsfelix/presentation-netponto-webapi
Filtros
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
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!
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
E o ReST?Representational State Transfer
ReferênciasPedro 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
Questões?
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! :)
Patrocinador "GOLD"
Obrigado!
Pedro Fé[email protected]://pfelix.wordpress.comhttp://twitter.com/pmhsfelixhttp://github.com/pmhsfelix
http://prompt.cc.isel.ipl.pt/