Olá pessoal, hoje eu gostaria de falar e mostrar como customizar as pesquisas no Web API, ou seja, saindo um pouco da rotina já criada pela ferramenta Visual Studio da Microsoft, vamos criar outros métodos dentro do Web API para pesquisas. É importante entender que além do trivial que são os métodos PUT, DELETE e GET, existe a possibilidade de criarmos outros usando outros nomes na assinatura do método.

Utilizei:
- Ferramenta: Visual Studio 
- Linguagem C#
- Tecnologia Web API / REST
- Busca no banco de dados: Linq

Esse método que vou criar fica disponível para ser chamado por outras aplicações sem qualquer problema. Pode ser chamado até pela própria aplicação que está usando a tecnologia. A assinatura do método faz com que a busca de um modo geral passe parâmetros como “?” interrogação e “&” comercial.

Lembre-se de ler todos os artigos anteriores que falei sobre Web API, cada passo é importante até chegar aqui. Segue os links abaixo dos artigos anteriores:

Criando e Consumindo Web API Parte 1

Criando e Consumindo Web API Parte 2

Criando e Consumindo Web API Parte 3

Criando e Consumindo Web API Parte 4

Criei dentro da classe “controller” para determinado contexto um método que soma valores. O método recebe dois parâmetros do tipo “Int” e retorna um do tipo “Int32”. Esse método não é um padrão do Web API, pra isso coloquei o nome de GetUsuariosByIdade. Veja a listagem 1.

Listagem 1. Criando método que soma valores

       public Int32 GetUsuariosByIdade(int idade, int soma)
        {
            return idade + soma;
        }

Como esse método está no contexto de usuário, para acessá-lo basta digitar o endereço api/usuario/?idade=10&soma=10. Note que não coloco o nome do método, passo apenas os parâmetros com os nomes iguais. Em resumo, é assim que funciona quando criamos algum método que não é padrão.

Outro exemplo é a busca pelo nome da pessoa. Por padrão, a busca de forma geral é sem a passagem de parâmetros, por exemplo: GetUsuarios(). Caso queira pegar um usuário pelo nome passando o parâmetro, é necessário gerar outro método. A listagem 2 mostra como buscar os usuários pelo nome usando Linq.

Listagem 2. Buscando os usuários pelo nome.

public IEnumerable GetUsuarioByName(string name)
        {
            var usuario = db.Usuarios.Where(x => x.Nome.Contains(name)).AsEnumerable();
            if(usuario == null)
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));

            return usuario;
        }

Note que na listagem 2, o nome do método é GetUsuarioByName recebe um parâmetro do tipo “string” chamado “name”. Na primeira linha do método eu busco a tabela de usuários where o campo “Nome” contém o valor da variável “name”. Isso significa que, se a variável “name” tiver o valor de “Mau” e retornará todos os nomes que começam ou terminam com esse valor, depois os dados serão armazenados na variável usuario que é verificada logo em seguida. Se o valor for igual a null, faz com que um erro retorne. No final do método o comando “return usuario” retorna os dados do tipo “IEnumerable ”. 

Para acessar esse método via browser ou no momento de consumir usando qualquer linguagem de programação, é necessário chamar o seguinte endereço: “api/usuario/?name=valor”. Seguindo o nosso exemplo citado acima, seria: “api/usuario/?name=Mau”.

Uma dica importante é não colocar os parâmetros com o mesmo nome, assim você pode criar vários métodos sem qualquer problema de conflito. Isso porque os métodos são identificados pelos parâmetros passados. 

Veja o resultado da pesquisa na imagem 1.


Imagem 1 – Pesquisando nomes

A pesquisa é realizada quando o usuário digita o valor no campo e clica no botão pesquisar. A listagem 3 mostra o que foi feito no botão pesquisar para consumir o método usando parâmetros.

Listagem 3. Consumindo os dados por parâmetro.

protected void cmdPesquisar_Click(object sender, EventArgs e)
        {
            System.Net.Http.HttpResponseMessage response = client.GetAsync("api/usuario/?name=" + txtNome.Text).Result;
            if (response.IsSuccessStatusCode)
            {
                usuariosUri = response.Headers.Location;
                var usuarios = response.Content.ReadAsAsync>().Result;

                GridView1.DataSource = usuarios;
                GridView1.DataBind();
            }
            else
                Response.Write(response.StatusCode.ToString() + " - " + response.ReasonPhrase);
        }

Espero que tenham entendido como usar e como chamar, qualquer dúvida pode entrar em contato pelo site www.mauriciojunior.org. Em breve publico mais um artigo e uma série de vídeos mostrando na prática. Abraço a todos.