Uma Introdução a ASP.NET Web API

Post on 07-Nov-2014

3.866 views 1 download

Tags:

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

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élixpmhsfelix@gmail.comhttp://pfelix.wordpress.comhttp://twitter.com/pmhsfelixhttp://github.com/pmhsfelix

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