PHP RESTful
ОСТАЛЬНЫЕ (на английском языке: Representational State Transfer, называется REST), относится к набору архитектурных ограничений и принципов.
REST-стиль дизайна Web API называется RESTful API. Она определяется из следующих трех ресурсов:
- Интуитивный краткий адрес ресурса: URI, например:
http://example.com/resources/
. - ресурс передачи: веб-служба принимает возвращения типов интернет-СМИ, таких как: JSON, XML, ЯМ нравится.
- Эксплуатация ресурсов: метод веб-службы в серии запросов на ресурс при поддержке (например: POST, GET, PUT или DELETE).
В этом руководстве мы будем использовать PHP (без рамки), чтобы создать RESTful веб-сервиса, вы можете скачать в конце статьи, чтобы использовать код в этом разделе.
В этом учебнике вы узнаете следующее:
- Создание RESTful веб-сервиса.
- С помощью встроенного PHP, не зависит от любых рамок.
- REST URI шаблон, чтобы следовать правилам.
- RESTful сервис принимает и формат может быть возвращен JSON, XML и так далее.
- Коды статуса HTTP соответствующего ответа в зависимости от ситуации.
- Демонстрационные запросы заголовка.
- для тестирования веб-службы RESTful Используйте REST клиент.
Примеры RESTful Webservice
Следующий код RESTful класс обслуживания Site.php:
примеров
/ *
* В данном руководстве примеры RESTful
* RESTful класс обслуживания
* /
Класс сайта {
частные $ сайтов = массив (
1 => 'TaoBao',
2 => 'Google',
3 => 'w3big',
4 => 'Baidu',
5 => 'Weibo',
6 => 'Сина'
);
общественная функция getAllSite () {
вернуть $ это -> сайты;
}
общественная функция getSite ($ ID) {
$ Сайт = массив ($ ID = > ($ это -> сайты [$ ID]) $ это -> сайты [$ ID] :? $ это -> сайты [1]);
вернуть $ сайт;
}
}
?>
отображение RESTful Services URI
REST-службы URI должен быть установлен в положение краткого адреса визуальных средств. сервер Apache .htaccess должен быть установлен соответствующий правила перезаписи.
В этом примере мы будем использовать два правила URI:
1, чтобы получить список всех сайтов:
http://localhost/restexample/site/list/
2, используя идентификатор для указанного сайта, следующий URI, чтобы получить идентификатор 3 сайтов:
http://localhost/restexample/site/list/3/
.htaccess правила конфигурации файла проекта заключаются в следующем:
# 开启 rewrite 功能 Options +FollowSymlinks RewriteEngine on # 重写规则 RewriteRule ^site/list/$ RestController.php?view=all [nc,qsa] RewriteRule ^site/list/([0-9]+)/$ RestController.php?view=single&id=$1 [nc,qsa]
RESTful Web Service Controller
В файле.htaccess, мы получим RestController.php подать соответствующий запрос, установив параметр "вид", получая различные параметры 'View' для распространения различных методов.Код файла RestController.php выглядит следующим образом :
примеров
require_once ( "SiteRestHandler.php");
$ Вид = "";
если (Исеть ($ _GET & # 91; "вид" & # 93;))
$ Вид = $ _GET & # 91 ; "вид" & # 93 ;;
/ *
* RESTful контроллер службы
* Отображение URL
* /
Переключатель ($ вид) {
случай "все":
// Обработать REST URL / сайт / список /
$ SiteRestHandler = новый SiteRestHandler ();
$ SiteRestHandler -> getAllSites ();
перерыв;
случай "сингл":
// Обработать REST URL / сайт / шоу / < идентификатор> /
$ SiteRestHandler = новый SiteRestHandler ();
$ SiteRestHandler -> getSite ($ _GET [ "ID"]);
перерыв;
случай "":
// 404 - не найден;
перерыв;
}
?>
Простые классы RESTful Foundation
Ниже приводится базовый класс RESTful для обработки в ответ на запрос кода статуса HTTP, код файла SimpleRest.php выглядит следующим образом :
примеров
/ *
* Простой RESTful веб - сервисы базового класса
* Мы можем расширить этот класс на основе спроса
* /
Класс SimpleRest {
частный $ httpVersion = "HTTP / 1.1 ";
публичная функция setHttpHeaders ($ CONTENTTYPE, $ StatusCode) {
$ StatusMessage = $ это -> getHttpStatusMessage ($ StatusCode);
заголовка ($ это -> httpVersion " " $ StatusCode .. "" $ StatusMessage ..);
заголовок ( "Content-Type:" $ CONTENTTYPE.);
}
общественная функция getHttpStatusMessage ($ StatusCode) {
$ HttpStatus = массив (
100 => 'Продолжить',
101 => 'Переключение протоколов',
200 => 'OK',
201 => ' Дата создания',
202 => 'Принято',
203 => 'Неавторитетная информация ',
нет 204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
300 => 'Multiple Choices',
301 => 'Переведен Постоянно',
302 => 'Найдено',
303 => 'См Other',
304 => 'Not Modified',
305 => 'Использовать прокси - сервер ",
306 => '(не используется)' ,
307 => 'Temporary Redirect',
400 => 'Bad Request',
401 => 'Несанкционированное',
402 => 'Требуется оплата',
403 => 'Запрещенный',
404 => 'Not Found',
405 => 'Method Not Allowed' ,
406 => 'Не Приемлемый',
407 => 'Требуется проверка подлинности прокси » ,
408 => 'Тайм - аут запроса',
409 => 'Конфликт',
410 => 'Унесенных',
411 => 'Длина Обязательный',
412 => 'Precondition Failed',
413 => 'Request Entity Too Large ",
414 => 'Request-URI Too Long',
415 => 'Неподдерживаемый Тип носителя' ,
416 => 'Невыполнимый диапазон запроса ',
417 => 'Expectation Failed',
500 => 'Внутренняя ошибка сервера » ,
501 => 'Не реализовано',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Тайм - аут шлюза',
505 => 'версия HTTP не поддерживается ");
Возвращение ($ httpStatus [$ StatusCode] ) $ httpStatus [$ StatusCode]: $ статус [500] ;?
}
}
?>
RESTful класс обработки Web Service
Ниже приводится RESTful Web Service класса обработчика SiteRestHandler.php, унаследовал выше мы предоставляем RESTful базовый класс, класс определяется параметрами запроса, чтобы определить, является ли возвращаемые коды состояния HTTP и форматы данных, мы предоставляем примеры трех форматов данных: "приложение / JSON", "приложение / XML" или "текст / html":
Код файла SiteRestHandler.php выглядит следующим образом :
примеров
require_once ( "SimpleRest.php");
require_once ( "Site.php");
Класс SiteRestHandler расширяет SimpleRest {
Функция getAllSites () {
$ = Новый сайт сайта ();
$ RAWDATA = $ сайт -> getAllSite ();
если (пусто ($ RAWDATA)) {
$ StatusCode = 404;
$ RAWDATA = массив ( 'ошибка' => 'сайтов не найдено!');
} Else {
$ StatusCode = 200;
}
$ RequestContentType = $ _SERVER [ 'HTTP_ACCEPT '];
$ Это -> setHttpHeaders ($ requestContentType , $ StatusCode);
если (StrPos ($ requestContentType, ' приложение / JSON')! == FALSE) {
$ Ответ = $ это -> encodeJson ($ RAWDATA);
Эхо $ ответ;
} Иначе , если (StrPos ($ requestContentType , "текст / html ')! == False) {
$ Ответ = $ это -> encodeHtml ($ RAWDATA);
Эхо $ ответ;
} Иначе , если (StrPos ($ requestContentType , 'приложение / XML')! == False) {
$ Ответ = $ это -> encodeXml ($ RAWDATA);
Эхо $ ответ;
}
}
общественная функция encodeHtml ($ responseData) {
$ HtmlResponse = "<таблица граница = '1'>";
Еогеасп ($ responseData , как $ ключ = > $ значение) {
.. $ HtmlResponse = "<тр > <TD>" $ ключ "</ TD> <TD>" $ значение "</ TD> </ TR>" ...;
}
. $ HtmlResponse = "</ таблица >";
вернуть $ htmlResponse;
}
общественная функция encodeJson ($ responseData) {
$ JsonResponse = json_encode ($ responseData) ;
возврат $ jsonResponse;
}
общественная функция encodeXml ($ responseData) {
// Создание объекта SimpleXMLElement
$ XML = новый SimpleXMLElement ( '< сайт> </ сайта> <XML версия = "1.0" ??>');
Еогеасп ($ responseData , как $ ключ = > $ значение) {
$ XML -> AddChild ($ ключ , $ значение);
}
возврат $ XML -> asXML () ;
}
общественная функция getSite ($ ID) {
$ = Новый сайт сайта ();
$ RAWDATA = $ сайт -> getSite ($ ID);
если (пусто ($ RAWDATA)) {
$ StatusCode = 404;
$ RAWDATA = массив ( 'ошибка' => 'сайтов не найдено!');
} Else {
$ StatusCode = 200;
}
$ RequestContentType = $ _SERVER [ 'HTTP_ACCEPT '];
$ Это -> setHttpHeaders ($ requestContentType , $ StatusCode);
если (StrPos ($ requestContentType, ' приложение / JSON')! == FALSE) {
$ Ответ = $ это -> encodeJson ($ RAWDATA);
Эхо $ ответ;
} Иначе , если (StrPos ($ requestContentType , "текст / html ')! == False) {
$ Ответ = $ это -> encodeHtml ($ RAWDATA);
Эхо $ ответ;
} Иначе , если (StrPos ($ requestContentType , 'приложение / XML')! == False) {
$ Ответ = $ это -> encodeXml ($ RAWDATA);
Эхо $ ответ;
}
}
}
?>
Далее мы через HTTP: // локальный / restexample / сайт / список / визита, выходные результаты являются следующими:
RESTful Web Service Client
Тогда мы можем использовать в качестве RESTful клиентов веб-сервиса "Advance Rest клиента» в браузере Google Chrome, чтобы запросить наши услуги.
Примеры запроса HTTP: // локальный / restexample / сайт / список / адреса, полученные данные аналогичноAccept: приложения / JSON
3 запроса идентификатор сайта w3big (учебное пособие), адрес доступа HTTP: // локальный / restexample / сайт / список / 3 /,
Источник загрузки
Код, используемый в примере, чтобы нажать на кнопку ниже, чтобы загрузить: