Olá, tudo beeeeeeemmmm???

Primeiro: Carambaaaaa, faz um tempão hein :)

Hoje vou falar sobre aplicações REST em php, e como criar a sua RESTful app!

Bom, vamos lá.

Oque é REST???

É um estilo de arquitetura para desenvolver aplicações web.

Como?

A idéia é simples, utilizar o protocolo HTTP que já temos e conhecemos, para desenvolver aplicações que possam ser “lidas” tanto por pessoas quanto por computadores.

Ok, vamos começar a falar sobre webservices então.

REST diz que uma página não é um recurso, e sim a representação de um recurso.
Ou seja, uma página web não é um recurso, e sim a representação de um, no formato HTML.

http://meusite.com/produtos/111

O protocolo HTTP, já possui todos os recursos que precisamos, então não precisamos fazer algo assim:

http://meusite.com/produtos/11/edit <- Isso não é legal 

Para mostrar que queremos alterar algo.

As URLs, devem ser hierárquicas! Ou seja, /edit é filho de produto? Eu acho que não.
Mas uma lista de fotos é!

http://meusite.com/produtos/11/fotos

Lindo, não? :)

Mas como eu faço para mostrar que quero alterar um produto então?
HTTP possui vários métodos, e REST diz que as ações são implícitas por esses métodos, e não passando a ação na URL.

GET
POST
PUT
DELETE

Esses são os métodos HTTP usados para construir apps RESTful.

GET http//meusite.com/produtos
Lista os produtos.

POST http//meusite.com/produtos
Adiciona um produto.

GET http//meusite.com/produtos/1
Mostra um produto específico.

PUT http//meusite.com/produtos/1
Altera um produto específico.

DELETE http//meusite.com/produtos/1
Deleta o produto.

Simples, não???

Agora vamos a questão de “representar” esses produtos

Esses produtos podem ser representados como?
HTML, JSON, XML, JPG, ...

E isso não precisa ser passado na URL.

http://meusite.com/produtos.xml <- Você não precisa deixar isso explícito!

O HTTP faz isso por você!

Para isso existe o cabeçalho Accept, com ele você fala “implícitamente” como você quer a representação desse produtos.

Accept    text/html,application/json 

Entenderam???

Vamos colocar a mão na massa então!

Para fazer isso, vou usar um cara bem legal chamado Respect\Rest. Com ele fica muito fácil desenvolver apps RESTful em PHP.
http://github.com/Respect/Rest

$router = new Router();

$router->get('/produtos', function() {
    return 'Listagem de produtos';
});

$router->post('/produtos', function() {
    return 'Criando um produto';
});

$router->get('/produtos/*', function() {
    return 'Mostrando um produto específico';
});

$router->put('/produtos/*', function() {
    return 'Alterando um produto';
});

$router->delete('/produtos/*', function() {
    return 'Apagando um produto';
});

Simples neh?

Agora vamos dizer de que formas esses produtos podem ser representados.

$router = new Router();

$router->get('/produtos', function() {
    return 'Listagem de produtos';
})->accept(
    array(
        'text/html' => function($data) {
            return 'Produto em HTML';
        },
        'application/json' => function($data) {
            return 'Produto em JSON';
        }
    )
);

$router->post('/produtos', function() {
     return 'Criando um produto';
});

$router->get('/produtos/*', function() {
    return 'Mostrando um produto específico';
});

$router->put('/produtos/*', function() {
    return 'Alterando um produto';
});

$router->delete('/produtos/*', function() {
    return 'Apagando um produto';
});

Está pronto! Agora, a lista de produtos pode ser representada em JSON e HTML.

Espero que tenham gostado da simples introdução que fiz!
Bom, vou ficando por aqui mesmo, num próximo post vou mostrar como realmente “desenvolver” uma aplicação completa.