Vous êtes sur la page 1sur 24

INCIO CURSOS

SOBRE

ASP.NET

SRIES

EVENTOS

Procurar

POSTADO EM 11 DE JULHO DE 2013

Anterior

Prximo

ASP.Net Web API Meu primeiro servio REST


ASP.Net Web API um framework que facilita a construo de servios REST HTTP que alcanam uma grande variedade de clientes incluindo Mobile, Browsers e aplicaes locais. a plataforma ideal para construo de servios REST baseados em .Net Com o lanamento do ASP.Net MVC 4 em 2012 uma das novas features foi o ASP.Net Web API, entenda como funciona e aprenda
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

a criar sua primeira aplicao HTTP REST. Introduo Servios de internet so populares j faz um bom tempo, WebServices foram desenvolvidos e consumidos durante longos anos sendo uma tecnologia livre de plataforma, ou seja, aplicaes .Net e Java se comunicam por WebServices sem dependncia de tecnologias. Nos anos seguintes a Microsoft lanou o Remoting e por fim o famoso WCF que engloba (HTTP, TCP, MQ). Apesar do Remoting e WCF serem tecnologias Microsoft o que WebServices, Remoting e WCF tem em comum? Todos eles so baseados em SOAP (Simple Object Access Protocol). O SOAP baseado em XML e busca padronizar o contedo que trafegado entre as pontas. O problema do SOAP que algumas plataformas no conseguiram acompanhar sua evoluo e a adoo se tornou complicada devido sua implementao, por este motivo comearam a surgir solues alternativas mais simples. Uma soluo alternativa ao SOAP e altamente adotada o REST (Representational State Transfer), baseado totalmente em HTTP e seus recursos. Para o melhor entendimento sobre ASP.Net
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Web API e REST sugiro conhecer um pouco sobre o protocolo HTTP. Grandes empresas como Google, Facebook, LinkedIn, Netflix entre diversas outras j disponibilizam APIs Web para serem consumidas, todas elas so baseadas em HTTP com REST. O ASP.Net Web API utiliza HTTP com REST e diferente do SOAP no depende de XML para trafegar as informaes, o formato padro para isso JSON (Java Script Object Notation). JSON um formato amplamente utilizado em qualquer plataforma (no apenas .Net), um subconjunto da notao de objeto de JavaScript, mas seu uso no requer JavaScript exclusivamente. Isso proporciona um potencial muito grande para os servios HTTP, pois um formato intercambivel, leve e livre de plataformas. possvel retornar XML com Web API ao invs de JSON ou outros formatos como CSV. Tambm possvel criar um formato prprio para retornar os dados, tudo fica a critrio do desenvolvedor. Mo na massa
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Vamos iniciar a construo do nosso servio REST com ASP.Net Web API, para isso este exemplo ir utilizar o Visual Studio 2012. Crie um novo projeto Web ASP.Net MVC 4.

Escolha o Template do ASP.Net Web API.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Espere seu projeto ser criado e ser exibida esta tela inicial (clique para expandir).

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Note que apesar de ser um template para construo de servios o projeto no deixa de ser ASP.Net MVC, no caso da criao de um projeto MVC + Web API no necessrio ter dois projetos na mesma solution, utilize apenas o template ASP.Net Web API. Rodando pela primeira vez a aplicao (F5).

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Uma Web Application no layout padro do ASP.Net MVC 4 foi criada, voc pode utilizar este site para criar a documentao e apresentao de sua Web API. Com o projeto configurado a proposta construir um servio de consumo do cadastro de clientes, o servio ir realizar consultas no modelo de dados que iremos criar. Na pasta Model adicione uma nova classe chamada Cliente.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

1 2 3 4 5 6 7 8 9 10

public class Cliente { public int ID { get; set; } public string Nome { get; set; } public string Email { get; set; } } public bool Ativo { get; set; }

Na sequncia crie uma Controller para trabalhar com a classe de Clientes (clique direito na pasta Controller > Add > Controller)

Observe que nesse exemplo est sendo utilizada uma opo de Scaffolding para criar uma Controller de Web API vazia, porm com
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

as actions de leitura e escrita, caso estivssemos utilizando Entity Framework a opo acima da selecionada j criaria uma estrutura com o CRUD e etc Com a Controller criada eis o cdigo gerado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
open in browser PRO version

using System.Collections.Generic; using System.Web.Http; namespace MeuServicoWebAPI.Controllers { public class ClienteController : ApiController { // GET api/cliente public IEnumerable Get() { return new string[] { "value1", "value2" }; } // GET api/cliente/5 public string Get(int id) { return "value"; } // POST api/cliente public void Post([FromBody]string value) { } // PUT api/cliente/5 public void Put(int id, [FromBody]string {
pdfcrowd.com

value)

Are you a developer? Try out the HTML to PDF API

27 28 29 30 31 32 33 34 35

{ } // DELETE api/cliente/5 public void Delete(int id) { }

Total semelhana com MVC certo? Digo inclusive que mais fcil construir uma Web API do que uma WebApp com MVC. Como diferenciar uma Controller MVC de uma Controller Web API? Uma Controller Web API herda de ApiController enquanto uma Controller MVC herda de Controller. Essa a forma mais fcil de identificar. Um ponto importante, o MVC assim como o Web API possuem rotas pr-definidas, no template de projeto a rota do MVC fica no arquivo RouteConfig.cs enquanto a do Web API fica no arquivo WebApiConfig.cs, ambas na pasta App_Start. Observe as duas rotas.
1 2 3 4
open in browser PRO version

// Rota Web API config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}",


pdfcrowd.com

Are you a developer? Try out the HTML to PDF API

5 6 7 8 9 10 11 12 13

"api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // Rota MVC routes.MapRoute(

name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );

Existem algumas diferenas, mas a que mais importante de entender que no caso da rota MVC a sequencia padro ser {controller}/{action}/{id} j na rota Web API a sequncia api/{controller}/{id}, sendo que api um valor hard coded e no temos uma action configurada para ser chamada na URI. Sendo assim como a rota do Web API sabe qual mtodo est sendo chamado? um ponto muito importante a entender, por conveno do ASP.Net Web API os nomes dos mtodos expressam a ocasio em que eles sero chamados. Dado os mtodos da Controller acima: Get
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Post Put Delete Estes so os nomes dos mtodos e tambm so alguns dos verbos aceitos pelo HTTP, falando em HTTP para os verbos listados teramos os seguintes comportamentos: Get = Select Post = Insert Put = Update (ou Insert) Delete = Delete Ou seja, atravs do HTTP quando for realizado um GET via URI o Web API retornar o resultado do mtodo Get, um POST via formulrio o Web API far uma incluso atravs do metodo Post, PUT via formulrio uma alterao atravs do mtodo Put e DELETE via URI uma excluso atravs do mtodo Delete. Vale lembrar que isso uma conveno e podemos fazer de outras formas, por exemplo, o mtodo Get poderia ser GetClientes, funcionaria da mesma forma, pois inicia com Get. Se um mtodo for criado como RetornarClientes seria necessrio especificar qual verbo HTTP este mtodo aceita, uma vez que o
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

especificar qual verbo HTTP este mtodo aceita, uma vez que o Web API no reconheceria sozinho qual dos mtodos executar, nesse caso ficaria assim:
1 2 3 4 5 6 // Definindo qual o verbo o mtodo aceita. [AcceptVerbs("GET")] public IEnumerable RetornarClientes() { return new string[] { "value1", "value2" }; }

Especificando o tipo de verbo aceito no mtodo podemos definir livremente a nomenclatura a ser utilizada sem depender da conveno padro. Ateno, cuidado ao definir os verbos aceitos, pois se um mtodo tiver a mesma estrutura (mesmo verbo aceito e mesmo tipo de parmetros recebidos) ir resultar em uma exception, pois o Web API no saber qual dos mtodos dever executar. Partindo da estrutura da Controller gerada faremos ela trabalhar com o modelo de dados da classe Cliente.
1 2 3 4 5 6 7
open in browser PRO version

using System.Linq; using System.Web.Http; using MeuServicoWebAPI.Models; namespace MeuServicoWebAPI.Controllers { public class ClienteController :
pdfcrowd.com

Are you a developer? Try out the HTML to PDF API

7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
open in browser PRO version

public class ClienteController : ApiController { private readonly Cliente[] Clientes = new Cliente[] { new Cliente { ID = 1, Nome = "Eduardo Pires", Email = "falecom@eduardopires.net.br", Ativo = true }, new Cliente { ID = 2, Nome = "Bill Gates", Email = "gates@microsoft.com", Ativo = true }, new Cliente { ID = 3, Nome = "Aleister Crowley", Email = "aleister@therion.com", Ativo = false } }; // GET api/cliente public Cliente[] Get() { return Clientes; } // GET api/cliente/5 public Cliente Get(int id) { var clientes = Clientes; x.ID == id); } return clientes.SingleOrDefault(x =>

// POST api/cliente public void Post([FromBody]string value) { } // PUT api/cliente/5 public void Put(int id, [FromBody]string {
pdfcrowd.com

value)

Are you a developer? Try out the HTML to PDF API

37 38 39 40 41 42 43 44 45

{ } // DELETE api/cliente/5 public void Delete(int id) { }

*Para os mtodos diferentes de Get (Post, Put, Delete) seria necessria uma estrutura de gravao de dados que no ser abordada nesse exemplo. Executando a aplicao testaremos a chamada do servio ASP.Net Web API. Primeiramente ser chamado o mtodo Get para testar se o servio retornar toda a lista de clientes. Observe a URI no browser.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

O servio funcionou e respondeu sendo chamado pelo browser, o retorno foi em XML, pois o browser no interpreta JSON, por padro o Web API est configurado para responder JSON sempre que possvel. Para testar com mais detalhes usaremos uma ferramenta chamada Fiddler (recomendo fortemente o conhecimento e uso desta ferramenta). Nesse exemplo ser chamado o mtodo Get que aceita o parmetro Id e retornar um dado de cliente especfico atravs de uma pesquisa executada no mtodo. Primeiramente chamaremos o servio Web API atravs da aba Composer, note que o verbo escolhido o Get e que agora est sendo informado o valor do Id do cliente na URI do servio. Clicando no boto Execute ser feita a chamada.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Na coluna da direita possvel observar que a consulta foi feita e o retorno dela o cdigo HTTP 200 (OK). Clicando no item desta coluna observe o retorno em JSON que ser exibido pela ferramenta.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

O servio retornou um dado de cliente especfico para esta consulta. Para ter uma viso completa do retorno clique na aba Raw, localizada ao lado da aba JSON.

HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Type: application/json; charset=utf-8 Expires: -1 Server: Microsoft-IIS/8.0 X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?RDpcTGFic1xNZXVTZXJ2aWNvV2ViQVBJXE1ldVNlcnZpY29XZWJBU X-Powered-By: ASP.NET Date: Thu, 11 Jul 2013 03:58:17 GMT
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Content-Length: 71 {"ID":2,"Nome":"Bill Gates","Email":"gates@microsoft.com","Ativo":true}

A ltima linha o retorno JSON da consulta em texto puro sem a formatao da ferramenta, observe que muito mais simples que XML. O servio Web API est funcionando e retornando uma lista de clientes ou um cliente especfico atravs de seu ID, basta agora ser consumido por qualquer tipo de aplicao. Para aprender mais Recentemente o Israel Aece lanou um e-Book gratuito sobre ASP.Net Web API, faa o download dele aqui. Recomendo a leitura. O site oficial do ASP.Net Web API tambm possui diversos exemplos e tutoriais essenciais no aprendizado. Resumo Podemos observar que muito simples criar um servio REST HTTP utilizando ASP.Net Web API e para quem est habituado com ASP.Net MVC mais simples ainda.
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

A ferramenta Fiddler ajuda muito em testes, podemos observar com riqueza os valores retornados e os cdigos de HTTP, muito til no caso de uma anlise. Continue acompanhando os posts da srie, no prximo sobre Web API abordarei segurana com Autenticao e Autorizao e exemplos de um site consumindo o retorno em JSON do servio Web API. Referncias ASP.Net Web API Web Site Oficial Gostou do artigo? Comente e compartilhe suas impresses nos comentrios abaixo

Like

28 1 2

47

932

Arquiteto de Sistemas, Desenvolvedor e Consultor. MSP, MCP, MCPD, MCTS, ITIL, Scrum Developer. .

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

A RT I G O S RE L A CI O NA DO S :

1. Exame para Certificao Microsoft Grtis. 2. ASP.Net MVC Validando e-mail com DataAnnotations 3. ASP.Net MVC 5 O que h de novo? 4. Recomendaes de Livros sobre ASP.Net MVC
CONTEDO POSTADO EM .NET GERAL, ASP.NET MVC, ASP.NET WEB API POR EDUARDO PIRES. LINK DIRETO PERMALINK.

6 COMENTRIOS EM ASP.NET WEB API MEU PRIMEIRO SERVIO REST

Luiz em 11 de julho de 2013 at 22:40 escreveu:

timo artigo, como sempres


Responder

Eduardo Pires em 12 de julho de 2013 at 9:09 escreveu:

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Muito obrigado Luiz. Abraos!


Responder

Wagner em 11 de outubro de 2013 at 10:50 escreveu:

Bom artigo, parabns !!!


Responder

Eduardo Pires em 15 de outubro de 2013 at 9:18 escreveu:

Obrigado Wagner. Abraos!


Responder

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

The Marine em 22 de outubro de 2013 at 5:17 escreveu:

timo artigo, parabns pela iniciativa. Continue escrevendo dessa forma. Um grande abrao
Responder

Eduardo Pires em 23 de outubro de 2013 at 10:14 escreveu:

Obrigado pelo feedback. Abraos!


Responder

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Deixe uma resposta


Escreva o seu comentrio aqui...

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Vous aimerez peut-être aussi