CodeIgniter RestServer

[Série RestServer] Criando um restserver com CodeIgniter – Editando e Excluíndo Registros

Nos 4 tutoriais anteriores vimos a parte teórica e demos início à implementação prática do restserver. Nesse tutorial vamos dar sequência à montagem do CRUD no restserver, para então passarmos para tarefas menos comuns e mais importantes na implementação do resteserver, como por exemplo, autenticação para poder efeutar as requisições.

Nesse tutorial vamos implementar os métodos PUT e DELETE, e ainda faremos algumas atualizações no código para que a primeira parte seja concluída.

Vamos começar fazendo os ajustes necessários na view, onde temos a listagem dos usuários e também a opção de criar um novo usuário.

Atualizando a view

A nossa view vai passar por mudanças simples para que possamos implementar as seguintes funcionalidades:

  • Linha da tabela clicável para abertura da modal de edição de dados do usuário
  • botão para remoção de usuário

Para adicionar a funcionalidade de linha clicável no DataTable, vamos precisar adicionar uma extensão para ele, e isso será feito através do Composer, já que o estamos utilizando para gerenciar as dependências da aplicação.

Abra o terminal, acesse o diretório do projeto e execute o comando a seguir para que a extensão do DataTable seja instalada.

bower install datatables.net-select --save

Após fazer isso, abra o arquivo welcome_message.php e adicione a chamada para o script da extensão no rodapé da página, junto com os demais scripts.

<script src="<?=base_url('bower_components/datatables.net-select/js/dataTables.select.min.js')?>"></script>

Adicione no cabeçalho a chamada para a folha de estilo responsável por aplicar a estilização na linha selecionada.

<link rel="stylesheet" href="https://cdn.datatables.net/select/1.2.0/css/select.dataTables.min.css">

Agora vamos aplicar as mudanças no corpo da página.

Dentro da div onde estão os botões Salvar e Cancelar, adicione um novo botão, Remover, conforme o código a seguir. Esse botão será o responsável por excluir um usuário do banco de dados.

<button type="button" class="btn btn-danger pull-left hidden" data-dismiss="modal" id="btn-remover-usuario" >Remover</button>

Clique aqui para visualizar o arquivo completo.

Ainda a nível de frontend, temos algumas mudanças a serem implementadas no arquivo actions.js.

Foram adicionadas mudanças para implementação das seguintes funcionalidades:

  • Linha da tabela clicável
  • Abertura da modal para edição dos dados do usuário
  • Remoção de usuário
  • Reset do formulário

Veja a seguir o código-fonte do arquivo actions.js após as novas implementações terem sido aplicadas. (Não entraremos em detalhes relacionados à construção do JS para que não tenhamos perda de foco dentro da série)

As mudanças aplicadas na view e no arquivo javascript vão refletir nas seguintes funcionalidades:

  • Ao clicar em uma linha da tabela será aberta uma modal, devidamente populada, com os dados do usuário para edição
  • Na modal de edição será exibido o botão para remover o usuário
  • O botão de remoção do usuário terá uma validação para confirmar se realmente deseja remover o usuário
  • Ao salvar os dados do usuário, o formulário será reiniciado, ou seja, os campos serão limpos e ele voltará ao estado inicial (pronto para inserir um novo usuário)

Atualizando as rotas

As rotas da aplicação também foram atualizadas, e agora vamos trabalhar apenas com 2 rotas para API, o que facilita ainda mais o controle.

Veja a seguir o arquivo de rotas atualizado:

Na linha 8 temos a rota que irá responder por requisições gerais, como a seleção de todos os usuários através do método GET e a criação de um novo usuário através do método POST.

Na linha 9 temos a rota que irá responder por requisições mais específicas, como a seleção de um único usuário através do método GET, a atualização de um usuário através do método PUT e a remoção de um usuário através do método DELETE. Essa rota recebe como terceiro parâmetro o ID do usuário que deve ter seus dados recuperados, manipulados ou removidos.

Com a view e as rotas devidamente atualizadas, é hora de atualizar o controller, que irá responder pelas rotas citadas acima.

Atualizando o controller

No tutorial anterior criamos os métodos index_get e index_post, responsáveis por recuperar a lista de usuários e criar um novo usuário, respectivamente.

Nesse tutorial vamos atualizar o método index_get para que possa responder tanto para a requisição de múltiplos usuários quanto para a requisição de um usuário específico, além de criarmos os métodos index_put e index_delete.

Abra o arquivo application/controllers/api/Usuarios.php e aplique as alterações conforme apresentado a seguir.

Atualizando o método index_get

Para que possamos obter os dados de múltiplos usuários ou um único usuário a partir do método index_get precisamos implementar um filtro de informação para identificar se foi passado ou não o ID do usuário que deve ser retornado.

Sendo assim, recuperamos o ID do usuário através do terceiro nó da URL para que possamos verificar, e então seguimos com o fluxo de obtenção dos dados.

Repare que nas linhas 13 e 16 temos chamadas a 2 métodos, GetAll e GetById, respectivamente, que serão implementados no model mais adiante nesse tutorial. Se o ID do usuário for informado então chama o método GetById, que retorna os dados de um usuário específico, caso contrário chama GetAllpara retornar a lista de usuários cadastrados.

A sequência do método continua a mesma que foi aplicada no tutorial anterior.

Criando o método index_put

O método index_put é quem irá responder pela edição do usuário usando o verbo http PUT.

Ele é bem semelhante ao método index_post mas faz uso do método update do model.

Criando o método index_delete

O método index_delete é quem irá responder pela edição do usuário usando o verbo http DELETE.

Ele é bem semelhante ao método index_post mas faz uso do método delete do model.

Atualizando o model

Para finalizar as atualizações desse tutorial, vamos criar os métodos GetById, Update e Delete no model Usuarios_model.

Abra o arquivo application/models/Usuarios_model.php e aplique as atualizações conforme descrito a seguir:

Criando o método GetById

O método GetById é o responsável por retornar os dados de um único usuário.

Ele recebe 2 parâmetros:

  • $id : que é o ID do usuário que deve ter os dados recuperados
  • $fields : que é a string com os campos que devem ser retornados. Caso o valor desse parâmetro não seja passado, serão retornados todos os campos.

Criando o método Update

O método Update é o responsável por atualizar os dados de um usuário.

Ele recebe 3 parâmetros:

  • $field : é o campo de referência para defnir qual usuario irá receber a atualização dos dados (geralmente o ID)
  • $value : é o valor do campo de referência ($field)
  • $dados : um array contendo os dados a serem atualizados

Criando o método Delete

O método Delete é o responsável por remover um usuário do banco de dados.

Ele recebe 2 parâmetros:

  • $field : é o campo de referência para defnir qual usuario será removido (geralmente o ID)
  • $value : é o valor do campo de referência ($field)

Considerações finais

Se vocês analisarem todo o código construído até o momento verão que não tem nada muito diferente do que já estamos acostumados a escrever no dia-a-dia, em aplicações tradicionais.

Construir APIs Rest com CodeIgniter não é tão complicado quanto parece. É possível termos APIs consistentes sem a necessidade de ficar escrevendo grandes blocos de código.

No próximo tutorial vamos fazer a implementação para trabalhar com upload de imagem através da API, não percam.

 

Download do código-fonte no github