4 março, 2012 12 Comentários AUTOR: elemarjr CATEGORIAS: Sem categoria Tags:, ,

Asp.net Web APIs: Going RESTful?!

Tempo de leitura: 1 minuto

Olá pessoal. Tudo certo?!

Nessa semana foi disponibilizada uma versão beta do Visual Studio 11.  Além do novo visual (ainda não sei se gosto), dezenas de novas features estão disponíveis. Podemos ter um “primeiro contato” com o framework 4.5, C# 5 e com o Asp.net MVC 4.

No post de hoje, mostro “uma primeira visão” de uma excelente novidade do Asp.net MVC 4: Asp.net Web APIs. Trata-se de uma alternativa “asp.net” para desenvolvimento de serviços baseados em HTTP.

Importante: Israel Aece já escreveu excelentes posts sobre o tema em seu blog.

Antes de começar..

No post de hoje, mostro como criar uma Web API usando Asp.net MVC 4. Para isso, baixei e instalei a nova versão do Visual Studio (http://www.microsoft.com/visualstudio/11/en-us). Entretanto, você também poderá utilizar o VS2010 baixando ASP.NET MVC 4 Beta for Visual Studio 2010 (http://www.asp.net/downloads)

Começando o projeto

Se você está curioso para ver a aparência do VS11, eis a “Start Page”

image

Dentre as opções de templates para novo projeto, encontramos “Asp.net MVC 4 Web Application”. Assim como ocorre com MVC 3, essa é a única opção para iniciar um projeto MVC, independente do tipo, inclusive para Web APIs.image

Ao iniciar o projeto, um novo diálogo solicita qual o tipo de aplicação desejamos começar. Para hoje, selecionemos Web API.

image

Após poucos instantes, temos um projeto pronto para ser executado.

image

Gostaria de destar a presença de dois controllers no projeto Default. Um, é o já “tradicional” HomeController (que apresenta uma interface Web). Outro, é ValueController que expõe nosso serviço.

image

Primeira execução

Já na primeira execução, vemos uma boa novidade: as interfaces default estão muito mais bonitas.

image

Para acessar a Wep API propriamente dita, recomendo a utilização do “Developers Tools”.

image

Olhando o código de nossa Web API

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;

namespace MyFirstWebAPI.Controllers
{
    public class ValuesController : ApiController
    {
        // GET /api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET /api/values/5
        public string Get(int id)
        {
            return "value";
        }

        // POST /api/values
        public void Post(string value)
        {
        }

        // PUT /api/values/5
        public void Put(int id, string value)
        {
        }

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

Se você sabe um poquinho sobre http, percebe que cada um dos métodos mapeia uma verbo (GET, PUT, POST, DELETE).

ApiController mapeia esses métodos aos verbos (ele faz isso). Além disso, ele faz a conversão do conteúdo conforme o header Accept.

image

Por agora, era isso!

Smiley piscando

12 Comentários

  1. Alexsandro (@alexsandro_xpt) 5 anos ago says:

    Eu estou procurando uma Lib RESTFul Cliente pra .net conhece algum?

    Responder
  2. Roberto 5 anos ago says:

    Como faço para consumir os serviços disponibilizados via web api em um aplicativo winforms?

    Responder
    • elemarjr 5 anos ago says:

      Usando APIs de consulta normais. WCF, seria minha recomendação

      Responder
      • Roberto 5 anos ago says:

        Quando desenvolvo um aplicativo c# desktop que necessita de acesso a um webservice, simplesmente adiciono o endereço via add web reference e tenho acesso a todas as interfaces disponibilizadas pelo web service. No entanto isto não ocorre com esta web api. Como posso referenciar este serviço diretamente?

        Responder
  3. israelaece 5 anos ago says:

    Boas Roberto,

    Em serviços REST isso não é possível porque ele não tem documentação (i.e. WSDL). E é ela que faz com que o VS faça toda a mágica para você. No caso de serviços REST, você pode utilizar a classe WebClient (System.Net) ou utilizar o HttpClient que a Microsoft também pretende colocar como parte "client" do Web API: http://www.israelaece.com/post/WCF-Web-API-Consumo-de-Servicos.aspx.

    Ambas as classes visam o consumo de recursos Web em em qualquer tipo de aplicações .NET, mas a segunda (HttpClient), é exclusiva para isso e traz muito mais facilitadores.

    Responder
    • Roberto 5 anos ago says:

      Valeu mesmo, Israel. Acho que posso seguir adiante a partir de suas dicas.

      Responder
      • Roberto 5 anos ago says:

        Ola, Israel.
        Já consegui fazer funcionar a parte cliente em um aplicativo winforms... agora o problema é autenticação. Toda vez que acesso algum método no web api que possui [Authorize] ele tenta desviar para a página de login da aplicação (que é mista, uma parte mvc e outra com o serviço da web api) e retorna o erro 404... como faço para autenticar e manter a autenticação entre as requisições feitas pelo cliente winforms?

        Responder
  4. Orian 5 anos ago says:

    Cara desculpe minha ignorancia, mas o que sao esses caracteres que sao retornados antes e depois do xml?

    Responder

Trackbacks para este post

  1. Handwriting Recognition com HTML5 Canvas « Breno Ferreira
  2. ASP.net Web APIs suporta “OData Protocol URI Conventions” « Elemar DEV
  3. ASP.net Web APIs suporta “OData Protocol URI Conventions” | Elemar JR