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.
9. Requisitos para criar uma API Web
Leve, testável, escalável
Separação de
responsabilidades
transversais
Suporte rico para
formatos e negociação de
conteúdo
Mapear facilmente
recursos para URIs e
implementar a interface
Modelo de programação
HTTP de primeira-classe
13. Recursos do ASP.NET Web API
Do ASP.NET MVC Do WCF Web API
• Link generation • Server-side query composition
• Testability • Create custom help pages
• IoC integration • Self-host
• VS template • Tracing
• Scaffolding
17. 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
18. 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
19. Rota Web API padrão
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
20. 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)
21. 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
23. 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
25. 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
28. 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
29. 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
};
31. Hospedagem
• 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
32. 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
33. Conclusão
ASP.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