REST практики на PHP, переписать и http-глаголы - PullRequest
4 голосов
/ 12 января 2012

Я внедряю службу REST в php.

q1. Можно ли разделить контроллер и ресурс?

http://myserver/myCtrl.php?res=/items/1

q2. если нет, то являются ли стандартные спецификации (если таковые имеются) для перезаписей на iis, apache, nginx и т. д. для того, чтобы выдержать http-глагол после перезаписи?

Если нет, как решить?

Ответы [ 2 ]

3 голосов
/ 13 января 2012

Для API (у меня есть фреймворк для этого), я склонен иметь структуру URL, которая выглядит следующим образом:

http://domain.com/api/[resource]/[id]/[subresource]

Я передаю все запросы на фронт-контроллерФайл .htaccess , который анализирует входящие запросы и передает запрос соответствующему контроллеру.Таким образом, мой index.php выглядит очень просто:

<?php

$request = explode('/', trim($_SERVER['REQUEST_URI'], '/'));

$resource_name = ucfirst($request[0]).'Controller';
$http_verb = strtolower($_SERVER['REQUEST_METHOD']);

$controller = new $resource_name;

$response = call_user_func_array(array($controller, $http_verb), array($request));

header('Content-Type: application/json');
echo json_encode($response);

Так что если вы вызываете http://domain.com/api/news,, то он попытается создать экземпляр класса с именем NewsController, а если это запрос GET , то метод get() этого класса или post() для запроса POST и т. Д.Ответ на этот вызов затем возвращается клиенту в виде JSON.

Надеюсь, этого будет достаточно для начала работы.

2 голосов
/ 13 января 2012

У меня были одни и те же вопросы, и я нашел это видео довольно полезным (не стандартами, а передовой практикой):

http://blog.apigee.com/detail/slides_for_restful_api_design_second_edition_webinar/

Я реализовал службу отдыха, переписав URL через файлы .htaccess (mod_rewrite) и центральный диспетчер, так что это выглядит так:

http://myserver/myctrl/resource/1

Мой .htaccess:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
</IfModule>

Подробнее о перезаписи: http://httpd.apache.org/docs/current/mod/mod_rewrite.html

У меня есть индексный файл, который в значительной степени соответствует тому, что наметил Мартин. Я взрываюсь на "/" и предполагаю, что первый - это контроллер, второй - действие, а остальные - параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...