Я планирую создать спокойный веб-сервис (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, в томе у вас есть все файлы, все проходит через класс маршрутизатора.