SlideShare a Scribd company logo
1 of 34
Download to read offline
TDC 2012 – .NET

Programando com
ASP.NET Web API
@IgorAbade
blog.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
Por que criar APIs Web?
• Adotar completamente o HTTP
GET /en/html/dummy.php?name=MyName&married=not+single &male=yes HTTP/1.1
Host: www.explainth.at
User-Agent: Mozilla/5.0 (Windows;en-GB; rv:1.8.0.11) Gecko/20070312
Firefox/1.5.0.11
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.explainth.at/en/misc/httpreq.shtml
Highrise: API Web na vida real
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
Então você quer criar sua API...
Então você quer criar sua API...
Então você quer criar sua API...
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
www.asp.net/web-api
Open-source!
aspnetwebstack.codeplex.com
Hello Web API
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ão
routes.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!!!
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 Dispatcher
                             Invoke Action


                             Action filters


          Model Bind


                         Authorization filters


         Select action                        Exception filters


       Route to controller                       Formatting


       Request                                   Response
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
IApiExplorer
IApiExplorer apiExplorer =
   config.Services.GetApiExplorer();


public interface IApiExplorer
{
   Collection<ApiDescription> ApiDescriptions { get; }
}
Página de Documentação
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 URL
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
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ã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
www.lambda3.com.br

More Related Content

More from Igor Abade

Provisionando ambientes de Dev e Teste com Azure DevTest Labs e VSTS
Provisionando ambientes de Dev e Teste com Azure DevTest Labs e VSTSProvisionando ambientes de Dev e Teste com Azure DevTest Labs e VSTS
Provisionando ambientes de Dev e Teste com Azure DevTest Labs e VSTSIgor Abade
 
Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)
Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)
Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)Igor Abade
 
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)Igor Abade
 
Desktop App Converter: Trazendo Apps Win32 para a Windows Store
Desktop App Converter: Trazendo Apps Win32 para a Windows StoreDesktop App Converter: Trazendo Apps Win32 para a Windows Store
Desktop App Converter: Trazendo Apps Win32 para a Windows StoreIgor Abade
 
Acelere - e melhore! - o feedback com testes automatizados rápidos
Acelere - e melhore! - o feedback com testes automatizados rápidosAcelere - e melhore! - o feedback com testes automatizados rápidos
Acelere - e melhore! - o feedback com testes automatizados rápidosIgor Abade
 
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Igor Abade
 
Suporte a macros na sua aplicação com PowerShell
Suporte a macros na sua aplicação com PowerShellSuporte a macros na sua aplicação com PowerShell
Suporte a macros na sua aplicação com PowerShellIgor Abade
 
Smoke tests, deployment e rollback automatizados (Mobile & Cloud Hack Days 2016)
Smoke tests, deployment e rollback automatizados (Mobile & Cloud Hack Days 2016)Smoke tests, deployment e rollback automatizados (Mobile & Cloud Hack Days 2016)
Smoke tests, deployment e rollback automatizados (Mobile & Cloud Hack Days 2016)Igor Abade
 
Smoke tests, deployment e rollback automatizados (DevOps Summit Brasil 2016)
Smoke tests, deployment e rollback automatizados (DevOps Summit Brasil 2016)Smoke tests, deployment e rollback automatizados (DevOps Summit Brasil 2016)
Smoke tests, deployment e rollback automatizados (DevOps Summit Brasil 2016)Igor Abade
 
Keynote - Trilha Negócios (DevOps Summit Brasil 2016)
Keynote - Trilha Negócios (DevOps Summit Brasil 2016)Keynote - Trilha Negócios (DevOps Summit Brasil 2016)
Keynote - Trilha Negócios (DevOps Summit Brasil 2016)Igor Abade
 
Além do pen-drive: empacotando seu software para distribuição e implantação (...
Além do pen-drive: empacotando seu software para distribuição e implantação (...Além do pen-drive: empacotando seu software para distribuição e implantação (...
Além do pen-drive: empacotando seu software para distribuição e implantação (...Igor Abade
 
Aprenda mais sobre sua aplicação e seus usuários com Application Insights (DN...
Aprenda mais sobre sua aplicação e seus usuários com Application Insights (DN...Aprenda mais sobre sua aplicação e seus usuários com Application Insights (DN...
Aprenda mais sobre sua aplicação e seus usuários com Application Insights (DN...Igor Abade
 
Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)
Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)
Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)Igor Abade
 
Muito além das startups: Build-Measure-Learn em sistemas corporativos
Muito além das startups: Build-Measure-Learn em sistemas corporativosMuito além das startups: Build-Measure-Learn em sistemas corporativos
Muito além das startups: Build-Measure-Learn em sistemas corporativosIgor Abade
 
Dilemas de um Desenvolvedor .NET na Terra do PowerShell
Dilemas de um Desenvolvedor .NET na Terra do PowerShellDilemas de um Desenvolvedor .NET na Terra do PowerShell
Dilemas de um Desenvolvedor .NET na Terra do PowerShellIgor Abade
 
Quebrando preconceitos: Continuous Delivery na Plataforma Microsoft
Quebrando preconceitos: Continuous Delivery na Plataforma MicrosoftQuebrando preconceitos: Continuous Delivery na Plataforma Microsoft
Quebrando preconceitos: Continuous Delivery na Plataforma MicrosoftIgor Abade
 
Monitorando aplicações usando Application Insights
Monitorando aplicações usando Application InsightsMonitorando aplicações usando Application Insights
Monitorando aplicações usando Application InsightsIgor Abade
 
BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012Igor Abade
 
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...Igor Abade
 
Aferindo a qualidade do serviço com testes de desempenho - MVP Virtual Confer...
Aferindo a qualidade do serviço com testes de desempenho - MVP Virtual Confer...Aferindo a qualidade do serviço com testes de desempenho - MVP Virtual Confer...
Aferindo a qualidade do serviço com testes de desempenho - MVP Virtual Confer...Igor Abade
 

More from Igor Abade (20)

Provisionando ambientes de Dev e Teste com Azure DevTest Labs e VSTS
Provisionando ambientes de Dev e Teste com Azure DevTest Labs e VSTSProvisionando ambientes de Dev e Teste com Azure DevTest Labs e VSTS
Provisionando ambientes de Dev e Teste com Azure DevTest Labs e VSTS
 
Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)
Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)
Testes Exploratórios não são sinônimo de bagunça! (TDC 2016 POA)
 
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
 
Desktop App Converter: Trazendo Apps Win32 para a Windows Store
Desktop App Converter: Trazendo Apps Win32 para a Windows StoreDesktop App Converter: Trazendo Apps Win32 para a Windows Store
Desktop App Converter: Trazendo Apps Win32 para a Windows Store
 
Acelere - e melhore! - o feedback com testes automatizados rápidos
Acelere - e melhore! - o feedback com testes automatizados rápidosAcelere - e melhore! - o feedback com testes automatizados rápidos
Acelere - e melhore! - o feedback com testes automatizados rápidos
 
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
 
Suporte a macros na sua aplicação com PowerShell
Suporte a macros na sua aplicação com PowerShellSuporte a macros na sua aplicação com PowerShell
Suporte a macros na sua aplicação com PowerShell
 
Smoke tests, deployment e rollback automatizados (Mobile & Cloud Hack Days 2016)
Smoke tests, deployment e rollback automatizados (Mobile & Cloud Hack Days 2016)Smoke tests, deployment e rollback automatizados (Mobile & Cloud Hack Days 2016)
Smoke tests, deployment e rollback automatizados (Mobile & Cloud Hack Days 2016)
 
Smoke tests, deployment e rollback automatizados (DevOps Summit Brasil 2016)
Smoke tests, deployment e rollback automatizados (DevOps Summit Brasil 2016)Smoke tests, deployment e rollback automatizados (DevOps Summit Brasil 2016)
Smoke tests, deployment e rollback automatizados (DevOps Summit Brasil 2016)
 
Keynote - Trilha Negócios (DevOps Summit Brasil 2016)
Keynote - Trilha Negócios (DevOps Summit Brasil 2016)Keynote - Trilha Negócios (DevOps Summit Brasil 2016)
Keynote - Trilha Negócios (DevOps Summit Brasil 2016)
 
Além do pen-drive: empacotando seu software para distribuição e implantação (...
Além do pen-drive: empacotando seu software para distribuição e implantação (...Além do pen-drive: empacotando seu software para distribuição e implantação (...
Além do pen-drive: empacotando seu software para distribuição e implantação (...
 
Aprenda mais sobre sua aplicação e seus usuários com Application Insights (DN...
Aprenda mais sobre sua aplicação e seus usuários com Application Insights (DN...Aprenda mais sobre sua aplicação e seus usuários com Application Insights (DN...
Aprenda mais sobre sua aplicação e seus usuários com Application Insights (DN...
 
Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)
Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)
Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)
 
Muito além das startups: Build-Measure-Learn em sistemas corporativos
Muito além das startups: Build-Measure-Learn em sistemas corporativosMuito além das startups: Build-Measure-Learn em sistemas corporativos
Muito além das startups: Build-Measure-Learn em sistemas corporativos
 
Dilemas de um Desenvolvedor .NET na Terra do PowerShell
Dilemas de um Desenvolvedor .NET na Terra do PowerShellDilemas de um Desenvolvedor .NET na Terra do PowerShell
Dilemas de um Desenvolvedor .NET na Terra do PowerShell
 
Quebrando preconceitos: Continuous Delivery na Plataforma Microsoft
Quebrando preconceitos: Continuous Delivery na Plataforma MicrosoftQuebrando preconceitos: Continuous Delivery na Plataforma Microsoft
Quebrando preconceitos: Continuous Delivery na Plataforma Microsoft
 
Monitorando aplicações usando Application Insights
Monitorando aplicações usando Application InsightsMonitorando aplicações usando Application Insights
Monitorando aplicações usando Application Insights
 
BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012
 
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
 
Aferindo a qualidade do serviço com testes de desempenho - MVP Virtual Confer...
Aferindo a qualidade do serviço com testes de desempenho - MVP Virtual Confer...Aferindo a qualidade do serviço com testes de desempenho - MVP Virtual Confer...
Aferindo a qualidade do serviço com testes de desempenho - MVP Virtual Confer...
 

Programando com ASP.NET Web API

  • 1. TDC 2012 – .NET Programando com ASP.NET Web API
  • 3. 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
  • 4. Por que criar APIs Web?
  • 5. Por que criar APIs Web? • Alcançar mais clientes
  • 6. Por que criar APIs Web? • Escalar com a Nuvem
  • 7. Por que criar APIs Web? • Adotar completamente o HTTP GET /en/html/dummy.php?name=MyName&married=not+single &male=yes HTTP/1.1 Host: www.explainth.at User-Agent: Mozilla/5.0 (Windows;en-GB; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11 Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: en-gb,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://www.explainth.at/en/misc/httpreq.shtml
  • 8. Highrise: API Web na vida real
  • 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
  • 10. Então você quer criar sua API...
  • 11. Então você quer criar sua API...
  • 12. Então você quer criar sua API...
  • 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
  • 24. HTTP Dispatcher Invoke Action Action filters Model Bind Authorization filters Select action Exception filters Route to controller Formatting Request Response
  • 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
  • 26. IApiExplorer IApiExplorer apiExplorer = config.Services.GetApiExplorer(); public interface IApiExplorer { Collection<ApiDescription> ApiDescriptions { get; } }
  • 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