2010-09-25 3 views
3

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

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

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

ответ

5

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

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

<?php 
    phpinfo(); 
?> 

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

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

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

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

EDIT:
Как отметил tdammers, Apache RewriteRules полезны, чтобы сделать ваш URL, довольно, в этом случае, чтобы скрыть имя скрипта, как это (в зависимости от местоположения вашего сценария, конечно):

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

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

1

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