За последние 24 часа нас посетили 36489 программистов и 1300 роботов. Сейчас ищут 919 программистов ...

REST API

Тема в разделе "PHP для новичков", создана пользователем machetero, 25 ноя 2015.

  1. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Знакомлюсь с сабжем.
    Я так понимаю запросы к сервису с REST API делаются обычным курлом ? И в нём указывается GET это, или UPDATE/PUT/DELETE ?
    И ещё вопрос про SOAP. Это клиент-серверная технология ? То бишь чтоб общаться с сервисом нужно чтоб был какой то клиентский SOAP-модуль для PHP ?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно делать и не курлом.

    соап есть для пхп, да.
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    да, есть библиотеки (обёртки над Curl) которые облегчают общение с REST.
    да, php soap client и всякие обёртки.

    Попробуй сделать "hello word", сразу станет всё понятно.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Код (PHP):
    1.     $opts = [
    2.       'http' => [
    3.         'method' => "POST",
    4.         'header' => "Content-Type: application/json; charset=utf-8\r\n",
    5.         'content' => json_encode([
    6.           'param' => $params,
    7.           'locale' => 'en'
    8.         ])
    9.       ],/*
    10.       "ssl"=>array(
    11.         "verify_peer"=>false,
    12.         "verify_peer_name"=>false,
    13.       ),*/
    14.     ];
    15.     $result = file_get_contents($path, 0, stream_context_create($opts));
    16.  
    без курла и без обёрток
     
  5. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    А как средствами php обрабатывать запросы PUT/DELETE ? С POST/GET всё понятно. Мои догадки не ушли дальше $_SERVER['REQUEST_METHOD'], мы узнали метод, а параметры запроса где взять ?
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    из адресной строки и на стандартном вводе.
     
  7. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    А что это ?
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    у каждого приложения которое запускается в любой операционной системе есть как минимум три стандартных потока. поток входных данных STDIN, поток выходных данных STDOUT и поток текста ошибок STDERR. когда у тебя браузер устанавливает сокет-соединение с вебсервером они создают две пары потоков - исходящий сокет барузера линкуется на входящий сокет сервера и наоборот исходящий сервера линкуется на входящий браузера. это позволит им обменяться необходимой информацией. собственно об информации. браузер спрашивает у сервера страницу передавая просто набор байтов который выглядит вот так утрированно
    Код (PHP):
    1. HOST example.com
    2. GET /index.php?module=user&id=2 HTTP/1.1
    3.  
    4. blahblahblah
    и тут же приведу второй вариант для примера:
    Код (PHP):
    1. HOST example.com
    2. PUT /index.php?module=user&id=2 HTTP/1.1
    3.  
    4. blahblahblah
    разница между вариантами только в том что GET заменилось на PUT. но об этом далее.

    веб-сервер по интерфейсу к которому просился подключиться браузер, выбирает виртуальный сервер, который обслуживает данный интерфейс. по заголовку HOST этот виртуальный сервер ищет виртуальный хост которому адресовано данное сообщение. это первый этап разрешения запроса.

    когда выбран виртуальный сервер и вебсервер видит что там крутится пхп машина, то он берет и записывает кучу хлама на входной поток пхп-машины и начинает слушать её выходной поток. пхп-машина в свою очередь приняв эту кучу хлама формирует удобные для программиста массивы - get, post, files, request, server, env и тому подобное. и запускает указанный скрипт.

    выполнив свою работу (скрипт) пхп машина сёрт ответом в свой выходной поток, к которому подключен входной поток воркера вебсервера. и тот в свою очередь ретранслирует этот поток в исходящий сокет соединения с браузером. и браузер прочитав свой входящий сокет - начинает рендерить полученный ресурс. видишь как всё просто?

    теперь о той небольшой разнице которая в двух примерных запросах. там поменялся только протокол - гет на пут. но всё остальное осталось прежним. поэтому получив этот хлам от вебсервера, пхп-машина так же создаст массив гет с ключами юзер и айди - потому что суперглобальный массив гет не от гет- или не-гет- запроса зависит, а от аргументов из адресной строки. и оба раза на стандартном входе он получит строку блаблабла с которой ничего не сделает - она идет после двух переводов строк значит это не заголовок а тело запроса. но у неё нет рецепта что делать с этой строкой поэтому она её просто проигнорирует.

    так вот. параметры для не важно какого метода запроса всегда можно прочитать на STDIN пхп-машины.
     
    askanim нравится это.
  9. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Ух ты ! Огромное спасибо ! Я стока нового узнал )
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Лучше ограничиться пост-запросами.
     
  11. vaajnur

    vaajnur Новичок

    С нами с:
    15 май 2017
    Сообщения:
    40
    Симпатии:
    3
    О rest api по простому
    http://phpjs.ru/2017/05/15/php-rest-api/
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    каждый хрен с горы подразумевает под rest что-то своё
     
    askanim и denis01 нравится это.
  13. vaajnur

    vaajnur Новичок

    С нами с:
    15 май 2017
    Сообщения:
    40
    Симпатии:
    3
    что не так? напиши объяснение
     
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    @vaajnur, а если я сделаю API, которое возвращает JSON, но принимает нормальные get-параметры, ужё всё, не REST? Да далеко ходить не надо:
    http://openweathermap.org/current - принимает самый обычный get.
     
  15. vaajnur

    vaajnur Новичок

    С нами с:
    15 май 2017
    Сообщения:
    40
    Симпатии:
    3
    это тоже REST. Статью прочел, да , в данном случае делать запрос с JSON не обязательно, достаточно обойтись простым GET.
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    REST это концепция, а не реализация. Не каждое HTTP API это REST.
     
  17. vaajnur

    vaajnur Новичок

    С нами с:
    15 май 2017
    Сообщения:
    40
    Симпатии:
    3
    Тогда какие основные особенности REST?
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  19. vaajnur

    vaajnur Новичок

    С нами с:
    15 май 2017
    Сообщения:
    40
    Симпатии:
    3
    статью прочел, не совсем понял суть(
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    никто не понимает. все называют REST'ом всё подряд. Запилил апи поверх хттп - уже хвост трубой и мол это рест. А это не рест, а просто некое апи поверх хттп. Сейчас все апи, работающие поверх хттп, возвращающие json называют рестом. Так вот.