Знакомлюсь с сабжем. Я так понимаю запросы к сервису с REST API делаются обычным курлом ? И в нём указывается GET это, или UPDATE/PUT/DELETE ? И ещё вопрос про SOAP. Это клиент-серверная технология ? То бишь чтоб общаться с сервисом нужно чтоб был какой то клиентский SOAP-модуль для PHP ?
да, есть библиотеки (обёртки над Curl) которые облегчают общение с REST. да, php soap client и всякие обёртки. Попробуй сделать "hello word", сразу станет всё понятно.
Код (PHP): $opts = [ 'http' => [ 'method' => "POST", 'header' => "Content-Type: application/json; charset=utf-8\r\n", 'content' => json_encode([ 'param' => $params, 'locale' => 'en' ]) ],/* "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ),*/ ]; $result = file_get_contents($path, 0, stream_context_create($opts)); без курла и без обёрток
А как средствами php обрабатывать запросы PUT/DELETE ? С POST/GET всё понятно. Мои догадки не ушли дальше $_SERVER['REQUEST_METHOD'], мы узнали метод, а параметры запроса где взять ?
у каждого приложения которое запускается в любой операционной системе есть как минимум три стандартных потока. поток входных данных STDIN, поток выходных данных STDOUT и поток текста ошибок STDERR. когда у тебя браузер устанавливает сокет-соединение с вебсервером они создают две пары потоков - исходящий сокет барузера линкуется на входящий сокет сервера и наоборот исходящий сервера линкуется на входящий браузера. это позволит им обменяться необходимой информацией. собственно об информации. браузер спрашивает у сервера страницу передавая просто набор байтов который выглядит вот так утрированно Код (PHP): HOST example.com GET /index.php?module=user&id=2 HTTP/1.1 blahblahblah и тут же приведу второй вариант для примера: Код (PHP): HOST example.com PUT /index.php?module=user&id=2 HTTP/1.1 blahblahblah разница между вариантами только в том что GET заменилось на PUT. но об этом далее. веб-сервер по интерфейсу к которому просился подключиться браузер, выбирает виртуальный сервер, который обслуживает данный интерфейс. по заголовку HOST этот виртуальный сервер ищет виртуальный хост которому адресовано данное сообщение. это первый этап разрешения запроса. когда выбран виртуальный сервер и вебсервер видит что там крутится пхп машина, то он берет и записывает кучу хлама на входной поток пхп-машины и начинает слушать её выходной поток. пхп-машина в свою очередь приняв эту кучу хлама формирует удобные для программиста массивы - get, post, files, request, server, env и тому подобное. и запускает указанный скрипт. выполнив свою работу (скрипт) пхп машина сёрт ответом в свой выходной поток, к которому подключен входной поток воркера вебсервера. и тот в свою очередь ретранслирует этот поток в исходящий сокет соединения с браузером. и браузер прочитав свой входящий сокет - начинает рендерить полученный ресурс. видишь как всё просто? теперь о той небольшой разнице которая в двух примерных запросах. там поменялся только протокол - гет на пут. но всё остальное осталось прежним. поэтому получив этот хлам от вебсервера, пхп-машина так же создаст массив гет с ключами юзер и айди - потому что суперглобальный массив гет не от гет- или не-гет- запроса зависит, а от аргументов из адресной строки. и оба раза на стандартном входе он получит строку блаблабла с которой ничего не сделает - она идет после двух переводов строк значит это не заголовок а тело запроса. но у неё нет рецепта что делать с этой строкой поэтому она её просто проигнорирует. так вот. параметры для не важно какого метода запроса всегда можно прочитать на STDIN пхп-машины.
@vaajnur, а если я сделаю API, которое возвращает JSON, но принимает нормальные get-параметры, ужё всё, не REST? Да далеко ходить не надо: http://openweathermap.org/current - принимает самый обычный get.
это тоже REST. Статью прочел, да , в данном случае делать запрос с JSON не обязательно, достаточно обойтись простым GET.
никто не понимает. все называют REST'ом всё подряд. Запилил апи поверх хттп - уже хвост трубой и мол это рест. А это не рест, а просто некое апи поверх хттп. Сейчас все апи, работающие поверх хттп, возвращающие json называют рестом. Так вот.