34
Programando com ASP.NET Web API TDC 2012 – .NET

Programando com ASP.NET Web API

Embed Size (px)

DESCRIPTION

ASP.NET MVC 4 agora inclui suporte avançado para criação de APIs Web usando o novo framework ASP.NET Web API. Nesta palestra você verá como usar o ASP.NET Web API para criar serviços HTTP que podem chegar a um amplo conjunto de clientes, incluindo navegadores e dispositivos móveis. ASP.NET Web API é um framework novo no ASP.NET MVC 4 para criar e consumir serviços HTTP. Esta palestra mostra como é fácil criar APIs Web que implementam a interface uniforme dos recursos HTTP, como suportar uma ampla gama de formatos (JSON, XML etc.) e permitir que clientes informem os formatos de resposta aceitáveis ​​usando negociação de conteúdo HTTP. Saiba como testar suas APIs Web, ativar a segurança, diagnosticar problemas e gerar páginas de ajuda.

Citation preview

Programando com ASP.NET Web API

TDC 2012 – .NET

@IgorAbadeblog.lambda3.com.br/L3/IgorAbade

O que é uma API Web?

Um serviço HTTP

Desenhado para amplo consumo

Usa HTTP como protocolo de aplicação, não como protocolo de transporte

Por que criar APIs Web?

Por que criar APIs Web?• Alcançar mais clientes

Por que criar APIs Web?• Escalar com a Nuvem

GET /en/html/dummy.php?name=MyName&married=not+single &male=yes HTTP/1.1Host: www.explainth.atUser-Agent: Mozilla/5.0 (Windows;en-GB; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5Accept-Language: en-gb,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveReferer: http://www.explainth.at/en/misc/httpreq.shtml

Por que criar APIs Web?• Adotar completamente o HTTP

Highrise: API Web na vida realdemo

Requisitos para criar uma API Web

Modelo de programação HTTP de primeira-classe

Mapear facilmente recursos para URIs e implementar a interface

Suporte rico para formatos e negociação de conteúdo

Separação de responsabilidades transversais

Leve, testável, escalável

?ASP.NET MVC

WCF Web HTTPWCF REST Starter KitWCF Web API

Então você quer criar sua API...

Então você quer criar sua API...

+ASP.NET MVC

WCF Web HTTPWCF REST Starter KitWCF Web API

Então você quer criar sua API...

ASP.NET Web API

Recursos do ASP.NET Web APIDo ASP.NET MVC• ASP.NET Routing• Model binding• Validation• Filters• Link generation• Testability• IoC integration• VS template• Scaffolding

Do WCF Web API• Modern HTTP programming model• HttpClient• Task-based async• Formatting, content negotiation• Server-side query composition• Create custom help pages• Self-host• Tracing

www.asp.net/web-api

Open-source!aspnetwebstack.codeplex.com

Hello Web APIdemo

Para implementar uma API Web• Derivar de ApiController• Implementar suas ações (Actions)– Actions são mapeadas para métodos HTTP– Prefixar nomes dos métodos com o método HTTP

desejado; ex.: PostComment– Usar atributos [HttpGet/Post/Put/Delete] se você

preferir um nome diferente

Routing• Mapeia um espaço de URI para seus

ApiControllers– Ex.: api/{controller}/{id}– {controller} + “Controller” = nome da classe

ApiController

• Pode ser ajustado usando valores default e restrições de rota

Rota Web API padrãoroutes.MapHttpRoute(

name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });

Parâmetros de ação• Tipos de dados simples vêm do URI

– Dados da rota, parâmetros da query string

• Tipos complexos vêm do corpo da requisição– Os MediaTypeFormatters configurados são usados para

deserializar o corpo da requisição baseados no content type– JSON, XML e form-url-encoded suportados nativamente

• Pode ser alterado com atributos [FromUrl], [FromBody], [ModelBinder] (custom parameter binding)

Validação• Validação é executada sobre os dados de

cada requisição• Erros de validação são acumulados no

ModelState• Verifique o valor de ModelState.IsValid• Usa DataAnnotations ou lógica

personalizada de validação

Northwind Traders!!!demo

Filtros• Filtros cuidam das responsabilidades transversais• Tipos de filtro:

– Filtros de ação rodam antes e depois de invocar uma ação– Filtros de autorização rodam antes do Model Binding e

servem para verificar as permissões (autorizar) o usuário– Filtros de exceção permitem gerar respostas de erro de

maneira centralizada

• Filtros podem ser configurados globalmente, por controlador ou por ação, usando atributos

HTTP DispatcherInvoke Action

Action filters

Model Bind

Select action Exception filters

Route to controller Formatting

Request Response

Authorization filters

Descrição de uma API Web• Use o serviço IApiExplorer para gerar uma

descrição em tempo de execução da sua API• Útil para criar páginas de

ajuda/documentação, clientes de teste e outras ferramentas

IApiExplorerIApiExplorer apiExplorer =

config.Services.GetApiExplorer();

public interface IApiExplorer{

Collection<ApiDescription> ApiDescriptions { get; }

}

Página de Documentaçãodemo

Negociação de Conteúdo• Formato da resposta é definido baseado na Negociação de

Conteúdo HTTP• Cabeçalho HTTP “Accept” na requisição indica o formato desejado• Servidor excolhe um formato para a resposta baseado em:

– Cabeçalhos da requisição– Tipo de dados de retorno– MediaTypeFormatters configurados

• JSON e XML suportados nativamente• Pode ser personalizado (ex.: RSS/Atom)

– Diferente do ASP.NET MVC, não é view. MediaTypeFormatter personalizado

Negociação de Conteúdo// Get the IContentNegotiator

IContentNegotiator negotiator = Configuration.Services.GetContentNegotiator();

// Run content negotiation to select a formatter

MediaTypeHeaderValue mediaType;

MediaTypeFormatter formatter = negotiator.Negotiate(

typeof(Contact), Request, Configuration.Formatters, out mediaType);

// Create a response message with an object content using the selected formatter

HttpResponseMessage response = new HttpResponseMessage()

{

Content = new ObjectContent<Contact>(contact, formatter),

RequestMessage = Request

};

Personalizando meu URLdemo

• Duas opções de hospedagem– ASP.NET Web Application (IIS)– Self-hosting (ex. Console app, Windows

Service, Azure Worker Role etc.)

• HttpConfiguration é o denominador comum

• Hospedagem em memória para testes fim-a-fim

• Tem um adaptador OWIN para hospedar em qualquer web server compatível com OWIN

Hospedagem

Como eu começo?• ASP.NET Web API vem com o ASP.NET MVC 4• Suportado no .NET 4• Já vem nativamente no Visual Studio 2012• Release Candidate disponível via– Web Platform Installer– NuGet– Visual Studio 2012 RC

ConclusãoASP.NET Web API no MVC 4 simplifica a criação de serviços HTTP que podem atender diversos clientes

ASP.NET Web API é a plataforma .NET ideal para a criação de serviços RESTful

“Brinque” com o ASP.NET MVC 4 Release Candidate

Acompanhe e participe da evolução do projeto no CodePlex

www.lambda3.com.br