Остальные веб-службы?

Я планирую создать спокойный веб-сервис (PHP).

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

являются ли «фактические» файлы php «user» и «ad»? и если нет, то как я могу сказать (в моем php-файле), какой вызывающий абонент вызывает «пользователь» или «объявление»? любой хороший учебник о том, как создать спокойный веб-сервис? Большинство руководств охватывают только основы веб-сервисов для отдыха.

Ну, для простых служб у вас есть один файл сценария (например, named index.php ) в качестве точки входа, которая отправляет различные пути к вашим функциям (что, конечно же, может быть в других файлах PHP). Он вызывается с одним из указанных вами путей после имени скрипта. В сценарии вы можете использовать $_SERVER['PATH_INFO'] чтобы определить этот путь.

Вы могли бы поэкспериментировать с этим немного, создав скрипт, содержащий только этот контент:

 <?php phpinfo(); ?> 

Если вы запросите этот скрипт в браузере с вашего веб-сервера, вы увидите все соответствующие данные, напечатанные в хорошем списке. Перейдите к разделу « Переменные PHP », чтобы увидеть свой PATH_INFO .

См. http://php.net/manual/en/reserved.variables.server.php.

EDIT2:
Кроме того, ограничение методов доступа к HTTP GET и POST облегчает вашу жизнь, потому что PHP имеет переменные $_GET и $_POST но не такие, как $_PUT / $_DELETE и тому подобное. Однако вы можете отправлять запросы POST со специальной переменной, определяющей метод, чтобы эмулировать операции PUT , DELETE , HEAD или OPTIONS (например, _method=PUT ).

При поддержке других методов, кроме GET и POST , используйте $_SERVER['REQUEST_METHOD'] чтобы определить используемый метод и прочитать данные, отправленные вместе с запросом из специального php://input « php://input (например, с помощью file_get_contents('php://input') ).

РЕДАКТИРОВАТЬ:
Как отмечали tdammers , Apache RewriteRules полезны, чтобы сделать ваши URL-адреса хорошими, в этом случае, чтобы скрыть имя скрипта, как это (в зависимости от местоположения вашего сценария, конечно):

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

Правила перезаписи Apache могут пригодиться. Создайте правило, которое направляет все ниже /api в /api/index.php , добавляя остаток URL (например, /ad/user ) в качестве параметра. Таким образом, http://example.com/api/ad/user переписывается на что-то вроде http://example.com/api/index.php?path=ad/user . Ваш скрипт index.php может просто подобрать $_GET['path'] и выполнить соответствующее действие.

Оба подхода хороши, хороший пример спокойной службы можно найти на CakePHP, в томе у вас есть все файлы, все проходит через класс маршрутизатора.