Статьи

ОТДЫХ — Можете ли вы сделать больше, чем просто записать? Часть 3

Часть 1 этой серии посвящена REST с теоретической точки зрения, в частности, что это за хрень. А затем, часть 2, углубимся в разговор о том, как вы можете построить REST-ориентированную систему. До сих пор это был захватывающий путь самореализации, но нет времени для отдыха, если хотите. Мы должны продолжать идти!

Представьте, что это теплый, солнечный, летний день. Вы просто идете вперед, совершая неторопливую прогулку в полдень, когда внезапно вы сталкиваетесь с RESTful API. Чем ты занимаешься? Как вы взаимодействуете с этим? Или, как сказали бы те из нас, кто знает, «как вы пользуетесь услугами RESTful?». Это, друзья мои, тема этой статьи.

Взаимодействие с REST

По сути, в вашей PHP-программе необходимо выполнить три основных вещи, чтобы использовать службы REST через HTTP: указать URL-адрес для ресурса, к которому нужно получить доступ (либо использовать, либо создать), указать любые параметры, необходимые для сопровождения запроса, и, наконец, вызвать правильный HTTP-глагол для фактического извлечения или обновления / создания.

Во-первых, вам нужно определить URL, который вы хотите создать, получить, обновить или удалить. Помните, что каждый ресурс REST идентифицируется уникальным URL, поэтому выбор правильного URL для использования очень важен. Иногда части, которые составляют URL, будут строго определены API, а в других случаях API будет принимать что угодно, независимо от того, насколько длинным или тупым. В тех случаях, когда вы сами определяете URL, вы должны сделать его максимально коротким и значимым. URL должны быть удобочитаемыми.

Во-вторых, вам нужно подумать о данных, которые вы будете использовать в транзакции. То есть любое веб-взаимодействие будет включать в себя перемещение данных в приложения или из приложений, поэтому настройка данных, которые вы собираетесь передавать, очень важна. Есть несколько способов сделать это; Вы можете предоставить данные в виде параметров GET или POST , заголовков HTTP или даже полезной нагрузки XML или JSON.

И вот, последний шаг; разговаривать с сервисом REST. Как вы можете догадаться, есть несколько способов сделать это. Если вы используете фреймворк, такой как Zend Framework или WS02, то, скорее всего, вам будут доступны удобные функции REST / HTTP. Если вы не используете фреймворк, то есть два расширения PHP, в частности, вы найдете полезным. Первый (и тот, который я буду использовать здесь) — это cURL, оболочка для библиотеки libcurl. Второе — расширение pecl_http, которое можно легко загрузить и установить через PECL. Любой из них должен хорошо работать для вас, позволяя вам писать код PHP, который может легко работать с содержимым HTTP и заголовками.

Я должен также упомянуть, что вам не нужно использовать cURL или PECL; Конечно, вы можете делать все с помощью простой PHP-функции (например, fopen() и file_put_contents() ), но это немного сложнее и не так элегантно. Пример использования таких функций PHP для связи с удаленным удаленным сервером см. В статье Дастина Руннелла « Понимание OAuth — Tweeting from Scratch» .

Объединяя это

Есть четыре шага к каждому виду cURL:

  • Инициализировать ресурс cURL
  • Установите все необходимые параметры CURL
  • Выполнить HTTP-вызов
  • Разобрать ответ

Итак, без дальнейших церемоний, давайте приведем три основных шага (и 4 специфичных для завитка шага) вместе с примером:

 <?php // set up the URL value involved in a variable $url = "http://www.funland.com/summerschedule"; // set up the data that is going to be passed $events = array( array("event" => "20120601-0001", "name" => "AC/DC Drink Till U Drop Concert", "date" => "20120601", "time" => "22000030"), array("event" => "20120602-0001", "name" => "Enya – Can You Feel the Peace", "date" => "20120602", "time" => "19300045"), array("event" => "20120603-0002", "name" => "Nicki Menaj – The Midnight Girls Concerrtt", "date" => "20120603", "time" => "21300039")); $jsonData = json_encode($events) // perform the curl transaction $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); $response = curl_exec($ch); $decode = json_decode($response); print_r($resonse); 

В этом примере указывается целевой ресурс, который будет вызван, и полезная нагрузка JSON с информацией о событии. Затем дескриптор cURL инициализируется с помощью функции curl_init() . Дескриптор используется с последующими функциями cURL, связанными с этим вызовом.

Затем устанавливается несколько опций cURL, чтобы сообщить cURL, что именно вы хотите от него делать. Это делается с помощью функции curl_setopt() .

  • CURLOPT_URL — позволяет cURL узнать URL, с которым вы хотите работать, в этом случае с помощью переменной $url которая была определена ранее.
  • CURLOPT_RETURNTRANSFER — говорит cURL не отправлять ответ прямо в браузер, а вместо этого возвращать его в виде строки из curl_exec() .
  • CURLOPT_POST — определяет, какой HTTP-глагол использовать, в данном случае POST . Обратите внимание, что в качестве третьего параметра здесь требуется значение true иначе оператор не будет работать.

cURL — очень гибкая библиотека, и вы можете указать множество настраиваемых параметров. Для получения полного списка обязательно ознакомьтесь с документацией по cURL на сайте PHP .

Затем пришло время фактически выполнить вызов cURL и интерпретировать результаты. Как написано выше, данные, которые вводятся в JSON через функцию json_encode() будут переданы в cURL с $jsonData переменной $jsonData . Если бы вы выполняли GET , то логика была бы аналогичной, за исключением CURLOPT_GET что использовался бы CURLOPT_GET , и вы следовали бы командам cURL с помощью функции json_decode() , которая принимала возвращаемые данные JSON и перемещала их в массив PHP.

Резюме

В этой статье представлен очень простой план того, как сделать HTTP-соединение из ваших PHP-скриптов. Теперь единственный оставшийся вопрос — как эта модель квалифицируется как RESTful и как вы сохраняете ее таким образом? Имейте в виду, что, поскольку REST является состоянием ума, а не стандартом, может быть определенное количество споров о том, является ли конкретная система RESTful или нет. Но вернемся к нашим основным принципам.

REST рассматривает все как ресурс и присваивает URL этому ресурсу. И мы должны сделать это с первой строкой кода. Кроме того, URL-адрес образует осмысленное имя, прямо противоположное архитектуре RPC, где все идет к узлу действия и не обязательно является конечным пунктом назначения.

REST не имеет состояния, и, как отмечено в примере, там нет ничего, что могло бы содержать информацию о предыдущих или будущих транзакциях. Каждый из них не зависит от того, что произошло раньше (за исключением обычных зависимостей данных).

REST — это простота, но она надежна и мощна. В примере использовался стандартный протокол (HTTP) и расширение cURL. Ничего особенного не нужно загружать, только основные возможности PHP и HTTP.

И, говоря о HTTP, есть еще одна вещь, которую необходимо изучить; то, о чем мы намекали с помощью приведенного выше оператора print_r() ; коды ответов и заголовки HTTP. Если вы собираетесь выполнять POST или другие операции, выполняемые на сервере, вам необходимо иметь представление о том, сработало ли это. Точно так же вы можете также дать серверу несколько указаний о том, как выполнить POST или какой тип данных получить с помощью GET. Все это и многое другое (ну, в основном «все это») будет рассмотрено в последней главе саги, где я познакомлю вас с увлекательным миром заголовков HTTP.

Изображение через littlesam / Shutterstock