Desenvolvendo API padrão REST usando ASP.NET Web API 2

1.009 visualizações

Publicada em

Palestra ministrada na FATEC de Tiradentes, São Paulo, SP.

Publicada em: Software

Desenvolvendo API padrão REST usando ASP.NET Web API 2

  1. 1. São Paulo, 2015 Desenvolvendo API padrão REST usando ASP.NET Web API 2 Faustino Manuel (Fausto)
  2. 2. O que é ASP.NET WEB API? De acordo com Chauhan, ASP.NET WEB API é um framework para construção de serviços HTTP que podem ser consumidos por um universo de clientes incluindo navegadores, aplicativos de celulares e tablets. Faz parte do Core da plataforma ASP.NET, podendo ser usado com o MVC e outros modelos de arquitetura de aplicações web. Na sua versão 2, oferece recursos que facilitam a criação de serviços no padrão REST, totalmente compatível com os mais modernos e famosos navegadores e dispositivos do mercado.
  3. 3. Por que usar o ASP.NET WEB API?? Você provavelmente deve estar se perguntando: por que eu usaria o ASP.NET WEB API diante de outras plataformas de construção de Web Services? Chauhan dá a resposta... “Web API é uma bela estrutura para expor seus dados e serviços para diferentes dispositivos. Além disso, é open source, uma plataforma ideal para a construção de serviços RESTful sobre o .NET Framework“. “Ele usa os recursos completos do HTTP (como URIs , cabeçalhos de request/response, cache , controle de versões, diferentes formatos de conteúdo) e você não precisa definir nenhuma configuração extra para dispositivos diferentes”.
  4. 4. Quais são os recursos que o WEB API suporta?? Na sua versão 2, o WEB API suporta uma gama de recursos que permitem a criação completa de serviços totalmente RESTful. Alguns desses recursos são listados a seguir: 1. Suporta ações convencionais baseadas em CRUD, uma vez que trabalha com verbos HTTP GET, POST, PUT, PATCH e DELETE;
  5. 5. Quais são os recursos que o WEB API suporta?? Na sua versão 2, o WEB API suporta uma gama de recursos que permitem a criação completa de serviços totalmente RESTful. Alguns desses recursos são listados a seguir: 1. v 2. As respostas suportam cabeçalhos HTTP e códigos que representam o status;
  6. 6. 1. 2. 3. Oferece suporte a JSON, XML e outros formatos que você quiser usar; Quais são os recursos que o WEB API suporta?? Na sua versão 2, o WEB API suporta uma gama de recursos que permitem a criação completa de serviços totalmente RESTful. Alguns desses recursos são listados a seguir:
  7. 7. 1. 2. 3. 4. Também pode aceitar e gerar conteúdos estáticos como imagens, arquivos PDF, entre outros; Quais são os recursos que o WEB API suporta?? Na sua versão 2, o WEB API suporta uma gama de recursos que permitem a criação completa de serviços totalmente RESTful. Alguns desses recursos são listados a seguir:
  8. 8. 1. 2. 3. 4. 5. Pode ser hospedado com a aplicação ou no IIS, isoladamente; Quais são os recursos que o WEB API suporta?? Na sua versão 2, o WEB API suporta uma gama de recursos que permitem a criação completa de serviços totalmente RESTful. Alguns desses recursos são listados a seguir:
  9. 9. 2. 3. 4. 5. 6. Oferece suporte aos recursos usados no ASP.NET MVC como rotas, controladores, Action Results, filtros, injeção de dependências, entre outros. Quais são os recursos que o WEB API suporta?? Na sua versão 2, o WEB API suporta uma gama de recursos que permitem a criação completa de serviços totalmente RESTful. Alguns desses recursos são listados a seguir:
  10. 10. Como fazer?? Agora que você já entendeu os motivos para usar o ASP.NET WEB API na construção de Web Services, que tal aprender como fazer? Let’s do it step by step!!! Para exemplificar a criação de serviços REST no Visual Studio usando Web API 2, vamos utilizar como exemplo um projeto simples de listagem de produtos.
  11. 11. Comece selecionando a template certa Para utilizar o Web API 2, você vai precisar da versão 4.5 ou superior do .NET Framework. Porém, é possível (mas, não recomendado) instalar o Web API usando versões anteriores do .Net (veja aqui: http://goo.gl/YR79lg). Para esse tipo de projetos, recomenda-se utilizar, no mínimo, o VS 2012. Porém, você pode fazê-lo usando a versão 2010, com .NET 4 instalado (veja aqui: http://goo.gl/e8ev8T). Abra o Visual Studio e crie um novo projeto usando a template ASP.NET Web Application, conforme a figura ao lado.
  12. 12. Web API com MVC Como vimos, o ASP.NET WEB API suporta a arquitetura MVC, o que significa que é possível criar um serviço HTTP RESTful com todos os recursos fornecidos pelo ASP.NET MVC Framework sob a plataforma .NET. A seguir, selecione a opção Web API. Caso você pretende construir sua própria camada de autenticação, selecione a opção No Authentication.
  13. 13. Web API com MVC Como vimos, o ASP.NET WEB API suporta a arquitetura MVC, o que significa que é possível criar um serviço HTTP RESTful com todos os recursos fornecidos pelo ASP.NET MVC Framework sob a plataforma .NET. Após selecionar corretamente a template, clique em OK e aguarde a conclusão do processo de criação do projeto. No final, a estrutura do seu projeto deverá ficar tal como na figura ao lado.
  14. 14. Componentes básicos Após a criação, seu novo serviço REST possui alguns componentes básicos. Além da estrutura baseada no MVC, um layout padrão também é criado, podendo ser customizado mais tarde com base na sua necessidade. Utilizando POSTMAN (extensão do Chrome que funciona como cliente para serviços REST) já é possível obter dados do controlador de exemplo denominado Values.
  15. 15. Instalação de dependências Para trabalhar com Web API 2, algumas dependências devem ser instaladas no projeto. Normalmente, o Visual Studio instala essas dependências durante a criação do projeto conforme apresentado na figura a seguir. Para instalar manualmente as dependências do Web API 2, abra o console de gerenciamento de pacotes do VS e digite: Install-Package Microsoft.AspNet.WebApi
  16. 16. Adicionando um controlador Web API Um controlador Web API (Web API Controller) é uma classe que permite o recebimento de requisições e o envio de dados por meio de respostas HTTP. Para o nosso exemplo, criamos um controlador e chamamos de ProdutosController. Veja aqui como adicionar um controlador Web API: http://goo.gl/A3qyc Ao adicionar um controlador Web API uma herança à classe ApiController é feita. Essa herança é necessária, uma vez que todo tratamento de request/response encontra-se encapsulado.
  17. 17. Criando operações de CRUD Para o nosso exemplo criamos 6 operações, que são apresentadas a seguir: Operações Read ObterTodos(): obtém todos os produtos. ObterPorTexto(string texto): obtém todos os produtos que contêm determinado texto no nome. ObterPorId(long id): obtém um produto cujo ID é igual ao enviado por parâmetro.
  18. 18. Criando operações de CRUD Para o nosso exemplo criamos 6 operações, que são apresentadas a seguir: Operação Create Post (Produto produto): cria um novo produto.
  19. 19. Criando operações de CRUD Para o nosso exemplo criamos 6 operações, que são apresentadas a seguir: Operação Update Put (long id, Produto produto): atualiza um produto já existente.
  20. 20. Criando operações de CRUD Para o nosso exemplo criamos 6 operações, que são apresentadas a seguir: Operação Delete Delete (long id): remove um produto.
  21. 21. Criando Rotas HTTP padrão REST Para que nossa API esteja de acordo com o padrão REST, precisamos definir rotas HTTP para as operações criadas, utilizando as diretrizes nele estabelecidas. O Web API oferece suporte ao atributo ROUTING (Attribute Routing), recurso que facilita a criação de rotas para as operações de controlador. Saiba mais aqui: http://goo.gl/maZa0A
  22. 22. Operações GET no padrão REST com Attribute Routing: GET /api/produtos: obtém todos os produtos GET /api/produtos/{texto}: obtém todos os produtos que contêm determinado texto no nome GET /api/produtos/{id}: obtém um produto cujo ID é igual ao enviado por parâmetro Criando Rotas HTTP padrão REST Para que nossa API esteja de acordo com o padrão REST, precisamos definir rotas HTTP para as operações criadas, utilizando as diretrizes nele estabelecidas. O Web API oferece suporte ao atributo ROUTING (Attribute Routing), recurso que facilita a criação de rotas para as operações de controlador. Saiba mais aqui: http://goo.gl/maZa0A
  23. 23. Operação POST no padrão REST com Attribute Routing: POST /api/produtos: cria um novo produto. Criando Rotas HTTP padrão REST Para que nossa API esteja de acordo com o padrão REST, precisamos definir rotas HTTP para as operações criadas, utilizando as diretrizes nele estabelecidas. O Web API oferece suporte ao atributo ROUTING (Attribute Routing), recurso que facilita a criação de rotas para as operações de controlador. Saiba mais aqui: http://goo.gl/maZa0A
  24. 24. Operação PUT no padrão REST com Attribute Routing: PUT /api/produtos/{id}: atualiza um produto já existente. Criando Rotas HTTP padrão REST Para que nossa API esteja de acordo com o padrão REST, precisamos definir rotas HTTP para as operações criadas, utilizando as diretrizes nele estabelecidas. O Web API oferece suporte ao atributo ROUTING (Attribute Routing), recurso que facilita a criação de rotas para as operações de controlador. Saiba mais aqui: http://goo.gl/maZa0A
  25. 25. Operação DELETE no padrão REST com Attribute Routing: DELETE /api/produtos/{id}: remove um produto. Criando Rotas HTTP padrão REST Para que nossa API esteja de acordo com o padrão REST, precisamos definir rotas HTTP para as operações criadas, utilizando as diretrizes nele estabelecidas. O Web API oferece suporte ao atributo ROUTING (Attribute Routing), recurso que facilita a criação de rotas para as operações de controlador. Saiba mais aqui: http://goo.gl/maZa0A
  26. 26. Para que o nosso serviço REST entenda e interprete nossas rotas, é necessário habilitar a configuração MapHttpAttributeRoutes na classe WebApiConfig. Configurando as rotas Não basta criar as rotas usando Attribute Routing. Algumas configurações são necessárias para que as rotas funcionem adequadamente. Tais configurações são apresentadas a seguir: Você pode combinar suas rotas customizadas com rotas convencionais . Para definir rotas convencionais, utilize o método MapHttpRoute .
  27. 27. Registrando as configurações de rotas Finalmente, precisamos registrar nossas configurações de rotas na aplicação. Isso é feito no arquivo Global.asax
  28. 28. Habilitando CORS CORS (Cross-Origin Resource Sharing) ou Compartilhamento de Recurso Cross-Origem é um mecanismo que define meios para um servidor permitir que seus recursos sejam acessados por uma página web de um domínio diferente. Algumas requisições são tradicionalmente limitadas a acessar o mesmo domínio. O CORS define um meio pelo qual um cliente e um servidor web podem interagir para determinar de forma segura se deve ou não haver requisições cross-origem. Saiba mais nesse link: http://www.w3.org/TR/cors/
  29. 29. Habilitando CORS Habilitar CORS no ASP.NET Web API 2 é muito simples. Uma vez habilitado, requisições AJAX de uma página web em um domínio diferente para a nossa API serão aceitos. Saiba mais nesse link: http://goo.gl/7CJg6r 1. Primeiro você precisa instalar as bibliotecas do CORS a partir do NuGet (por padrão, essas bibliotecas não são instaladas na criação do projeto).
  30. 30. Habilitando CORS Habilitar CORS no ASP.NET Web API 2 é muito simples. Uma vez habilitado, requisições AJAX de uma página web em um domínio diferente para a nossa API serão aceitos. Saiba mais nesse link: http://goo.gl/7CJg6r 2. Abra a classe WebApiConfig e faça a chamada do método EnableCors() 3. Existem vários níveis de habilitação do CORS no Web API 2. No nosso exemplo, fizemos isso no nível da aplicação. Ou seja, habilitamos o CORS na aplicação inteira.
  31. 31. Habilitando CORS Executando o mesmo código, não obtemos mais o erro de CORS e os dados são apresentados, conforme imagem a seguir:
  32. 32. Onde encontrar mais conteúdo teórico-prático?? A Internet está completa de conteúdos didáticos (outros nem tanto) para estudar ASP.NET WEB API. A seguir, apresento alguns links que podem ser consultados para aprender mais sobre os poderosos recursos que esse framework oferece. Introdução ao ASP.Net Web API http://eduardopires.net.br/2013/07/asp-net-web-api-meu-primeiro-servico-rest/ Sobre o ASP.NET WEB API 2 http://eduardopires.net.br/2013/07/asp-net-web-api-2-novidades/
  33. 33. Muito obrigado! gravatar.com/fawstoh fausto.net@live.com
  34. 34. Fontes OBS: algumas das imagens contidas nesse documento não são de minha autoria. Foram retiradas de diferentes sites da Internet, cujos links são apresentados a seguir: Introdução ao ASP.NET WEB API http://www.dotnet-tricks.com/Tutorial/webapi/VG9K040413-What-is-Web-API-and-why-to-use-it-?.html http://www.dotnet-tricks.com/Tutorial/webapi/VG9K040413-What-is-Web-API-and-why-to-use-it-?.html ASP.Net Web API 2 – O que há de novo? http://eduardopires.net.br/2013/07/asp-net-web-api-2-novidades/ http://bitoftech.net/2014/03/05/new-asp-net-web-api-2-ihttpactionresult-cors-tutorial/ ASP.Net Web API no .NET Framework 4.0 http://docs.telerik.com/data-access/developers-guide/using-web-services/asp.net-web-api/developer- guide-wcfservices-web-api-install-nuget-netframework40 ASP.Net Web API usando VS 2010 https://robertbigec.wordpress.com/2012/10/11/developing-mvc-4-web-api-with-visual-studio-2010/ Atualizado pela última vez em 04 de Maio de 2015 Fontes das Imagens: http://www.devbattles.com/ru/images/upload/VPS-JSON-Beating-XML.png http://httpresponder.com/json-xml-eg.png http://enzolutions.com/assets/img/crossdomain.png http://thebloomsdaystory.com/wp-content/uploads/2012/07/16416_MDJPG.jpg http://www.bacancytechnology.com/wp-content/themes/twentyfourteen/images/MVC.jpg https://s-media-cache-ak0.pinimg.com/736x/8a/18/94/8a1894db246529782c34092cafac2d5c.jpg http://www.austere.co.in/images/winserver+iis7.png https://www.google.com.br/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&cad=rja&uact=8&ved=0CAc QjRw&url=http%3A%2F%2Fcode.google.com%2Fp%2Fthoth- gateway%2F&ei=GT5BVavFKuexsAS2pID4Dw&bvm=bv.92189499,d.cWc&psig=AFQjCNFyCD6j- BZA7121tFeXHKa-keiBDQ&ust=1430425441764635 https://mperaltav.files.wordpress.com/2011/11/iconos2.jpg http://www.smashingmagazine.com/images/404-error-pages/simp.gif http://emitknowledge.azurewebsites.net/wp-content/uploads/2014/12/Tag-Cloud-Web-API1.png http://www.apiacademy.co/sites/default/files/Web-APIs-v5_0.png

×