Criando e Consumindo Web API . Parte 4


Ol√° leitor(a), dando continuidade a s√©rie de artigos sobre criar e consumir Web API, hoje eu vou falar e mostrar como fazer o PUT ou seja, como fazer ‚Äúupdate‚ÄĚ no banco de dados usando Web API e o m√©todo PUT criado em artigos anteriores. A cria√ß√£o do Web API est√° descrito todo na primeira parte.

N√£o deixe de ler as partes anteriores, segue o link abaixo:

Lembro que todos os artigos foram descritos baseados no passo a passo, ou seja, buscando descrever de forma simples e prática para um melhor aprendizado. Toda essa tecnologia da Microsoft está disponível com a nova plataforma MVC 4.0 e a ferramenta Visual Studio 2012. A ferramenta pode ser baixada gratuitamente no site da Microsoft. O Web API pode ser usado em qualquer dispositivo móvel ou web site, isso tudo foi descrito nas partes anteriores. 

Lembro também que essa tecnologia conhecida também como REST é usada desde do ano 2000 pelo eBay, depois o Amazon começou a usar e veio se popularizar no ano 2010 quando outros serviços começaram a usar e disponibilizar pela Internet.  Veja o que usei para desenvolver esse artigo:

- Visual Studio 2012
- MVC 4.0
- Template Web API
- Projeto do tipo Web/Mobile

No artigo anterior, parte 3, mostrei o objeto GridView com os links chamados ‚ÄúExcluir‚ÄĚ e ‚ÄúAtualizar‚ÄĚ. O excluir foi feito e agora vamos fazer o ‚ÄúAtualizar‚ÄĚ, isto √©, continuo com o mesmo projeto e o mesmo GridView. Por isso pe√ßo a todos que leia desde o primeiro artigo at√© o √ļltimo.

Antes de mostrar o c√≥digo, vou informar a ideia principal para que entenda melhor cada passo. Como o objeto GridView √© preenchido, o clique no link chamado ‚Äúatualizar‚ÄĚ √© feito dentro do m√©todo RowCommand. Os valores da linha selecionada s√£o pegos e s√£o enviados para os campos da p√°gina.¬†

Com os campos preenchidos, o Id (chave principal da minha tabela) está escondido e o usuário não consegue alterar. O objeto usado para esconder o Id foi o Hidden. Como o usuário pode atualizar o nome da pessoa, esse campo é armazenado em um objeto TextBox. Existe um botão que chama a atualização dos dados, isto é, no clique do botão, os valores são passados para o método que por si só usa o Web Api. Espero que tenham entendido o funcionamento desse exemplo 4.

Para atualizar os dados no banco de dados atrav√©s do Web API, o comando necess√°rio para executar este feito √© o ‚ÄúPutAsJsonAsync‚ÄĚ, passando a URL e os dados de atualiza√ß√£o. A figura 1 mostra os dados retornados.


Figura 1 - Dados retornados

Existe um campo que o usuário pode ver, que é o objeto TextBox, o outro o usuário não pode. Na parte HTML do código ASPX existem os dois campos. Listagem 1.

Listagem 1 - Mostrando os objetos da tela

<asp:HiddenField ID="hdId" runat="server" />

<asp:TextBox ID="txtNome" runat="server">asp:TextBox>

 

<asp:Button ID="cmdAtualizar" runat="server" Text="Atualizar" OnClick="cmdAtualizar_Click" />

O nome do Hidden é hdId, o nome do TextBox é txtNome e o botão que vai atualizar os dados é o cmdAtualizar. O primeiro passo é programar o click do link Atualizar dentro do GridView. A listagem 2 mostra como pegar os dados do GridView e jogar nos campos.

Listagem 2 - Mostrando como pegar os dados depois de clicar no link atualizar

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)

        {

            if (e.CommandName == "Atualizar")

            {

                int _index = int.Parse((String)e.CommandArgument);

                string _chave = GridView1.DataKeys[_index]["Id"].ToString();

                string _nome = Server.HtmlDecode(GridView1.Rows[_index].Cells[1].Text);

 

                _hdId.Value = _chave;

_                txtNome.Text = _nome;

_                txtNome.Focus();

_            }

        }


A primeira linha do c√≥digo verifica se o comando √© igual ao link do GridView. Se o comando for ‚ÄúAtualizar‚ÄĚ, ent√£o o index √© pego com o ComandArgument. A chave do GridView √© pego atrav√©s do DataKeys e a linha √© pega com o m√©todo Rows do pr√≥prio GridView passando a vari√°vel index. Lembre-se que √© necess√°rio passar o n√ļmero da c√©lula come√ßando do zero e assim por diante.

Com as vari√°veis e dados, basta atribuir os valores para os objetos da tela. Por isso que existe o hdId.Value= _chave e o txtNome.Text = _nome.

Para jogar os dados do grid na tela, n√£o precisa buscar no banco de dados novamente, nem mesmo resubimeter os dados na p√°gina. Esses comandos feitos s√£o mostrados como resultado da figura 2.


Figura 2 - Jogando os dados para o campo TextBox.

Até o momento, fizemos apenas o envio dos dados para os campos. Um escondido e outro que pode ser alterado. A parte onde aparece o nome Mauricio 22, o usuário pode alterar e depois basta clicar no botão Atualizar.

A listagem 3 mostra o clique do bot√£o Atualizar chamando outro m√©todo respons√°vel pela comunica√ß√£o Web API e passando par√Ęmetros.

Listagem 3 - Clique do bot√£o atualizar.

protected void cmdAtualizar_Click(object sender, EventArgs e)

{

update(int.Parse(hdId.Value), txtNome.Text);

}


O m√©todo ‚Äúupdate‚ÄĚ √© necess√°rio passar dois par√Ęmetros. Um do tipo Inteiro e outro do tipo String, exatamente o id e nome. Agora vamos come√ßar a utilizar estes par√Ęmetros criando classes e chamando m√©todos do Web API.

O primeiro passo foi criar uma classe chamada ‚ÄúUser‚ÄĚ com duas propriedades.Veja na listagem 4.
Listagem 4 - Nova classe com propriedades

class_ User_

_    {

        [Key]

        public Int32 Id { get; set; }

       

        public String Nome { get; set; }

    }


Note que a classe possui os mesmos valores existentes no grid. Essa classe eu criei para passar ao Web Api a informação.

Passando para o m√©todo update, a primeira percep√ß√£o √© que ele recebe dois par√Ęmetros. Depois, os par√Ęmetros s√£o atribu√≠dos na classe ‚ÄúUser‚ÄĚ. Veja a listagem 5 mostrando todo o m√©todo.

Listagem 5 - Método update Web API.

private void update(int _Id, String _nome)

        _{

_            var_ usuarios = new_ User_() {Id = _Id, Nome = _nome };

_            System.Net.Http.HttpResponseMessage response = client.GetAsync("api/usuario").Result;

            response = client.PutAsJsonAsync("api/usuario/" + _Id, usuarios).Result;

 

            if (response.IsSuccessStatusCode)

                usuariosUri = response.Headers.Location;

            else

                Response.Write(response.StatusCode.ToString() + " - " + response.ReasonPhrase.ToString());

 

            _getAll();

        }


A primeira linha pega os dados enviados e atribui a classe criada chamada ‚ÄúUser‚ÄĚ. Listagem 6.

Listagem 6 - Pegando os dados e atribuindo na classe User
var usuarios = new User() {Id = _Id, Nome = _nome };

Depois de atribuir os par√Ęmetros, usei o HttpResponseMessage enviando a URL do Web API. A mesma vari√°vel response chama o ‚Äúclient.PutAsJsonAsync‚ÄĚ passando par√Ęmetro: URL barra o Id v√≠rgula a vari√°vel de usu√°rios atribu√≠da anteriormente. Se o resultado for de sucesso, ent√£o o dado foi atualizado com sucesso, caso contr√°rio √© impresso na tela o status do erro. Vamos ver se vai funcionar, veja a figura 3.


Figura 3 - Alterando dados

Note que o dado ‚ÄúMauricio 22‚ÄĚ foi alterado para ‚ÄúMauricio Junior‚ÄĚ sem qualquer problema. O GridView mostra que o Id 208 foi atualizado sem qualquer problema.

Bom, vou ficar por aqui e qualquer d√ļvida pode entrar em contato pelo site www.mauriciojunior.org. Lembro que, para ler este artigo √© necess√°rio ler todos os outros desde a cria√ß√£o do Web API at√© a utiliza√ß√£o da tecnologia. Espero que tenha gostado e at√© o pr√≥ximo artigo.