CodeIgniter RestServer

[Série RestServer] Criando um RestServer com CodeIgniter – Instalação e Configuração

Atendendo a muitos pedidos vamos começar uma série sobre RestServer com CodeIgniter.

Nesse primeiro post veremos como instalar e configurar o ambiente, e fazer os primeiros testes.

Montando o ambiente

Para montar o ambiente você precisará da versão mais recente do CodeIgniter e também do código atualizado do restserver. Vejamos como instalar cada um deles.

Iniciando o projeto com o CodeIgniter

Para iniciar o projeto com co CodeIgniter vamos utilizar o Composer para baixar a última versão instável do framework.

Acesse o seu diretório de projetos pelo terminal e execute o comando a seguir para criar o diretório do projeto e já copiar o CodeIgniter para dentro do diretório.


composer create-project bcit-ci/codeigniter codeigniter-restserver --prefer-dist

Download e instalação do código do RestServer

Como se sabe o CodeIgniter não tem suporte nativo a Rest Server, então precisamos usar uma implementação de terceiros para adicionar o suporte. Utilizaremos o código do Chris Kacerguis, que é um fork do projeto original criado pelo Phil Sturgeon, e que tem recebido atualizações com uma boa frequência.

Acesso o GitHub do projeto e faça o download do código-fonte, salvando o arquivo ZIP em um diretório de fácil acesso em seu computador.

Após fazer o download, descompacte o arquivo ZIP para que possamos copiar os arquivos para os respectivos diretórios no projeto original. Você terá uma estrutura de diretórios parecida com a exibida nas imagens a seguir:

 

ci-restserver-arquivos ci-restserver-arquivos-2

 

 

 

 

 

 

A primeira imagem mostra a raiz do diretório do restserver, e a segunda mostra o conteúdo do diretório application.

Ainda na raiz do diretório do restserver tem a documentação, que está localizada no diretório documentation, a documentação é bem simples, mas dá pra ter uma visão legal do código e entender como se dá o seu funcionamento.

Agora precisamos integrar esses diretórios e todo o seu conteúdo com o código-fonte original do CodeIgniter. Para isso, basta você copiar o conteúdo do diretório application do código do RestServer para dentro do diretório application do código original do CodeIgniter.

Ao copiar o diretório você com certeza será perguntado se quer substituir os arquivos existentes pelos novos. Você deve confirmar a substituição.

Feito isso a instalação está concluída e você já poderá executar os primeiros testes usando os links de exemplo do próprio código-fonte.

Para acessar esses links você deve acessar o diretório do seu projeto no browser, que deverá ser algo do tipo http://localhost/codeigniter-restserver.

Preview Home Rest ServerSe clicar em REST Server Tests você terá acesso a uma outra tela onde são listados os links para testes, além do link para um tutorial e do link do código-fonte no GitHub.

RestServer Links

Como funciona o Rest Server

O RestServer que acabamos de configurar tem suporte para retorno dos dados nos seguintes formatos:

  • HTML
  • JSON
  • CSV
  • XML

Todo o retorno de dados é baseado nas informações que são passadas no cabeçalho da requisição HTTP, o verbo HTTP passado e a URL utilizada.

No exemplo que o código do restserver já disponibiliza ele traz duas rotas configuradas:


$route['api/example/users/(:num)'] = 'api/example/users/id/$1'; // Example 4
$route['api/example/users/(:num)(\.)([a-zA-Z0-9_-]+)(.*)'] = 'api/example/users/id/$1/format/$3$4'; // Example 8

Essas rotas são responsáveis pelos links de número 4 e 8 da lista de exemplos disponíveis (conforme mostrado na imagem acima).

Se analisar bem verá que os demais links não utilizam rotas definidas no arquivo iapplication/config/routes.php, mas fazem o uso das rotas mágicas do CodeIgniter (para saber mais sobre as rotas, veja esse post).

As rotas mágicas são chamadas feitas utilizando na URL o nome do controller e do método a ser executado.

Entendendo o controller do RestServer

O controller de um restserver é muito semelhante ao controller de uma aplicação comum que você está acostumado a desenvolver, exceto por algumas particularidades.

A primeira particularidade é a necessidade de dar um require para disponibilizaro acesso ao código da library REST_Controller que é de onde o controller da api será extendido.


<?php

defined('BASEPATH') OR exit('No direct script access allowed');

// This can be removed if you use __autoload() in config.php OR use Modular Extensions
require APPPATH . '/libraries/REST_Controller.php';

class Example extends REST_Controller {


}

Ao usar class Example extends REST_Controller você estará disponibilizando os métodos do REST_Controller para o controller da sua api.

Em relação aos métodos, eles seguem um padrão, onde todos utilizam um sufixo que identifica o verbo HTTP da requisição.

O código acima é o mesmo do código de exemplo. Repare que ele possui 3 métodos:

  • users_get
  • users_post
  • users_delete

Veja que os métodos todos se iniciam com users e o sufixo varia conforme o verbo HTTP.

Se comparar as URLs utilizadas para obtenção dos dados verá que elas são como URLs usadas em aplicações tradicionais, mas com a diferença de que o verbo HTTP não fica explícito na URL.


http://127.0.0.1/codeigniter-restserver/index.php/api/example/users

api: diretório com os controllers da api dentro de application/controllers

example: nome do controller

users: método a ser executado

Quando você acessa a URL acima no browser, por padrão é utilizado o verbo GET, ou seja, o método que será executado será o users_get.

Para testar chamadas com outros verbos HTTP como POST, PUT ou DELETE você precisará de um aplicativo ou de alguma extensão para o seu browser. No Firefox você pode utilizar a extensão RESTClient.

Você pode criar um controller para cada conjunto de requisições diferentes, por exemplo, se você estiver montando um blog poderá ter uma api que retorna informações dos autores, dos posts, das categorias, mas isso é assunto para o próximo post, onde vamos começar a construir um restserver e aprender os recursos disponíveis do código que implementamos nesse tutorial.

Até o próximo post!