Descansar os Serviços da Web?

Estou planejando criar um serviço web reparador (PHP).

api/user api/user/[id] api/ad api/ad/[id]; etc 

são arquivos de php reais “user” e “ad”? e se não, como posso dizer (no meu arquivo php) qual o chamador que está chamando de “usuário” ou “anúncio”? algum bom tutorial sobre como criar um serviço web reparador? A maioria dos tutoriais cobre apenas os fundamentos do resto de serviços da web.

Bem, para serviços simples, você possui um único arquivo de script (por exemplo, nomeado index.php ) como o ponto de input que distribui os vários caminhos para suas funções (o que, naturalmente, pode ser em outros arquivos do PHP). É chamado com um dos caminhos que você mencionou anexados após o nome do script. No script, você pode usar $_SERVER['PATH_INFO'] para determinar esse caminho.

Você poderia experimentar com isso um pouco fazendo um script com apenas esse conteúdo nele:

 < ?php phpinfo(); ?> 

Se você solicitar esse script em um navegador a partir do seu servidor web, você verá todos os dados relevantes impressos em uma boa lista. Desça até a seção Variáveis do PHP para ver seu PATH_INFO .

Veja http://php.net/manual/en/reserved.variables.server.php

EDIT2:
Além disso, restringir os methods de access ao HTTP GET e POST torna sua vida mais fácil porque o PHP tem $_GET e $_POST variables, mas não por exemplo $_PUT / $_DELETE e similares. No entanto, você pode enviar pedidos POST com uma variável especial especificando o método para emular operações PUT , DELETE , HEAD ou OPTIONS (por exemplo, _method=PUT ).

Ao suportar outros methods do que GET e POST , use $_SERVER['REQUEST_METHOD'] para determinar o método usado e ler os dados enviados juntamente com a solicitação da input “arquivo” php://input (por exemplo, com file_get_contents('php://input') ).

EDITAR:
Como observou, lembranças Apache Rewrite são úteis para tornar seus URLs bonitos, neste caso, para ocultar o nome do script como esse (depende da localização do seu script, é claro):

 RewriteEngine on RewriteCond %{REQUEST_URI} !^/api/index\.php(/|$) RewriteRule ^/api/(.*)$ /api/index.php/$1 [QSA,L] 

As regras de reescrita do Apache podem ser úteis. Faça uma regra que /api/index.php tudo abaixo /api para /api/index.php , adicionando o restante do URL (por exemplo, /ad/user ) como um parâmetro. Assim, http://example.com/api/ad/user é reescrito a algo como http://example.com/api/index.php?path=ad/user . Seu script index.php pode simplesmente pegar $_GET['path'] e executar a ação apropriada.

Ambas as abordagens estão bem, uma boa amostra de serviço repousante pode ser encontrada no CakePHP, no bolo você obteve todos os arquivos, tudo passa por uma class de roteador.