Практики REST на PHP, переписывание и http-глаголы

90
7

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


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


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

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


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

спросил(а) 2012-01-12T15:01:00+04:00 8 лет, 9 месяцев назад
1
Решение
81

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


http://domain.com/api/[ресурс]/[ID]/[subresource]


Я передаю все запросы на передний контроллер с файлом .htaccess, который анализирует входящие запросы и передает запрос на контроллер relavant. Поэтому мой 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.


Надеюсь, этого должно быть достаточно, чтобы вы начали.

ответил(а) 2012-01-13T01:35:00+04:00 8 лет, 9 месяцев назад
71

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


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


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

ответил(а) 2012-01-12T23:48:00+04:00 8 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема