quinta-feira, 30 de agosto de 2012

RESTful Web Services PHP com Respect / Rest

A construção de WebServices RESTful está surgindo como uma alternativa para a integração de sistemas independente de plataforma.  Além de ser mais simples e leve que o SOAP,  possui a capacidade de transmitir dados diretamente através de HTTP.
Nesse post não pretendo explicar o que é, e todos os princípios da arquitetura REST Transferência de Estado Representacional (Representational State Transfer), e quem não conhece e estiver a fim de aprender... esta disponível a própria tese do Roy Fielding sobre o tema, e uma artigo Wikipédia.

O RESTful foca em URIs e nos detalhes do protocolo HTTP para se beneficiar de seus recursos, sem a necessidade de passar a ação implicitamente na URL ex: Para que eu vou implicitar a ação Edit na minha url http://meusite/usuario/666/edit , se  com o recursos do HTTP posso fazer assim: PUT  http//meusite.com/usuario/666.
 Assim como no Java existe JERSEY que é a implementação de referencia do JAX-RS (API RESTful web Service) , no PHP existe a simples e direta Respect / Rest  disponível aqui no github.

Agora vamos faze de forma rápida e simples um exemplos do Respect\Rest  usando os métodos HTTP (GET,POST,PUT,DELETE) para construir uma app RESTFul.

require_once 'bootstrap.php';
require_once 'Respect/Rest/Router.php';
require_once 'Respect/Rest/Request.php';

use Respect\Rest\


Router;
$router = new Router('/index.php/');
/**
 * get
 * 
 */
$router->get('/meusite/app/login/*/*', function($login, $senha) {
            if ($login == "rectec" && $senha == "123") {
                return "Usuario=> $login Senha: " . md5($senha);
            } else {
                return "Você não existe!!!";
            }
        });

$router->get('/meusite/usuarios', function() {
    return 'Listagem de usuarios';
})->accept(
    array(
        'text/html' => function($data) {
            return 'usuarios em HTML';
        },
        'application/json' => function($data) {
            return 'usuarios em JSON';
        }
    )
);
/**
 * post
 * 
 */
$router->post('/meusite/usuario/', function() {
            
            $data_back = json_decode(file_get_contents('php://input'));
            
            return 'Cadastrando: ' . json_encode($data_back);
        });

/**
 * Alterar
 * 
 */
$router->put('/meusite/usuario/*', function($id = null) {
            return 'Alterando: ' . $id;
        });
/**
 * Deletar
 * 
 */
$router->delete('/meusite/usuario/*', function($id = null) {
            return 'Deletando: ' . $id;
        });
Caso queira representar a saída com HTML, JSON, XML, JPG, etc,  use o Cabeçalho Accept! Para testar vc pode usar um debug para RESTful web service chamado RESTClient no seu FireFox!

2 comentários:

  1. Desculpe, mas estou tendo uma certa dificuldade em usar o respect.
    É necessário apenas dar os includes (require), igual a você fez no exemplo ou eu necessito de instalar algo no servidor ?

    ResponderExcluir
    Respostas
    1. Opa! Basta colocar a biblioteca (do repositorio http://github.com/Respect/Rest) e configurar o htaccess (se não me engano no link tem um exemplo)

      Excluir