Uma Introdução a ASP.NET Web API

49
Uma Introdução à ASP.NET Web API Pedro Félix http://netpont o.org 27ª Reunião Lisboa - 24/03/2012

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 of Uma Introdução a ASP.NET Web API

Page 1: Uma Introdução a ASP.NET Web API

Uma Introdução à ASP.NET Web APIPedro Félix

http://netponto.org27ª Reunião Lisboa - 24/03/2012

Page 2: Uma Introdução a ASP.NET Web API

Patrocinador "GOLD"

Page 3: Uma Introdução a ASP.NET Web API

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

Page 4: Uma Introdução a ASP.NET Web API

Sumário

• Enquadramento e objectivos• Modelo de programação• Arquitectura de processamento• Extensibilidade

Page 5: Uma Introdução a ASP.NET Web API

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

Page 6: Uma Introdução a ASP.NET Web API

ASP.NET Web API

Fonte: http://blog.programmableweb.com/2012/02/06/5000-apis-facebook-google-and-twitter-are-changing-the-web/

Page 7: Uma Introdução a ASP.NET Web API

ASP.NET Web API

Fonte: http://www.hanselman.com/blog/VisualStudio11BetaInContext.aspx

Page 8: Uma Introdução a ASP.NET Web API

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

Page 9: Uma Introdução a ASP.NET Web API

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, …

Page 10: Uma Introdução a ASP.NET Web API

HTTP

Page 11: Uma Introdução a ASP.NET Web API

Modelo de Programação

demonstração

Page 12: Uma Introdução a ASP.NET Web API

Distribuição - pacotes NuGet

Page 13: Uma Introdução a ASP.NET Web API

Dependências

System.Json

System.Net.Http.*

System.Web.Http.*

Page 14: Uma Introdução a ASP.NET Web API

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, ...

Page 15: Uma Introdução a ASP.NET Web API

Modelo de programação

public class HomeController : ApiController { public HttpResponseMessage Get() {

...}

}

ApiController e actions

Page 16: Uma Introdução a ASP.NET Web API

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

Page 17: Uma Introdução a ASP.NET Web API

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);}

Page 18: Uma Introdução a ASP.NET Web API

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

Page 19: Uma Introdução a ASP.NET Web API

Modelo de programação• HttpConfiguration– HttpRouteCollection

• HttpServer– HttpSelfHostServer, ...

• ApiController– Acções associadas a métodos HTTP (GET, POST, PUT, DELETE, ...)

• HttpRequestMessage e HttpResponseMessage

Page 20: Uma Introdução a ASP.NET Web API

HTTP: modelo de classes

Page 21: Uma Introdução a ASP.NET Web API

Handler: Request Response

Page 22: Uma Introdução a ASP.NET Web API

Handler Pipeline

HttpRequestMessage

HttpResponseMessage

DelegatingHandler HttpMessageHandlerInnerHander

Page 23: Uma Introdução a ASP.NET Web API

Handler Pipeline

Handler Handler

Handler Handler

Page 24: Uma Introdução a ASP.NET Web API

HttpClient

demonstração

Código-fonte disponível em:https://github.com/pmhsfelix/presentation-netponto-webapi

Page 25: Uma Introdução a ASP.NET Web API

HttpClient

Page 26: Uma Introdução a ASP.NET Web API

HttpClient e handlers

Page 27: Uma Introdução a ASP.NET Web API

HttpClient e handlers

DelegatingHandler(e.g. Caching)

HttpClientHandlerInnerHander

HttpClient

Page 28: Uma Introdução a ASP.NET Web API

Arquitectura de processamento

Page 29: Uma Introdução a ASP.NET Web API

Web/ASP.NET Hosting

Page 30: Uma Introdução a ASP.NET Web API

ASP.NET Web Hosting

demonstração

Código-fonte disponível em:https://github.com/pmhsfelix/presentation-netponto-webapi

Page 31: Uma Introdução a ASP.NET Web API

Self-hosting

Page 32: Uma Introdução a ASP.NET Web API

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;

Page 33: Uma Introdução a ASP.NET Web API

Media type formatting

Stream

media-type

CLR Type

Page 34: Uma Introdução a ASP.NET Web API

Media Type Formatter

demonstração

Código-fonte disponível em:https://github.com/pmhsfelix/presentation-netponto-webapi

Page 35: Uma Introdução a ASP.NET Web API

Arquitectura de processamento

Page 36: Uma Introdução a ASP.NET Web API

Handler Pipeline

Handler Handler

Handler Handler

Page 37: Uma Introdução a ASP.NET Web API

Message Handler

demonstração

Código-fonte disponível em:https://github.com/pmhsfelix/presentation-netponto-webapi

Page 38: Uma Introdução a ASP.NET Web API

Arquitectura de processamento

Page 39: Uma Introdução a ASP.NET Web API

Controller Factory

demonstração

Código-fonte disponível em:https://github.com/pmhsfelix/presentation-netponto-webapi

Page 40: Uma Introdução a ASP.NET Web API

Filtros

Page 41: Uma Introdução a ASP.NET Web API

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

Page 42: Uma Introdução a ASP.NET Web API

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!

Page 43: Uma Introdução a ASP.NET Web API

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

Page 44: Uma Introdução a ASP.NET Web API

E o ReST?Representational State Transfer

Page 45: Uma Introdução a ASP.NET Web API

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

Page 46: Uma Introdução a ASP.NET Web API

Questões?

Page 47: Uma Introdução a ASP.NET Web API

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! :)

Page 48: Uma Introdução a ASP.NET Web API

Patrocinador "GOLD"

Page 49: Uma Introdução a ASP.NET Web API

Obrigado!

Pedro Fé[email protected]://pfelix.wordpress.comhttp://twitter.com/pmhsfelixhttp://github.com/pmhsfelix

http://prompt.cc.isel.ipl.pt/