Как известно, в классическом варианте сайт делится на две области:

  • Фронт-энд (область доступная пользователю)
  • Бэк-энд (закрытая часть, где происходит управление данными сайта)

Как правило, контент для фронт-энда извлекается из стороннего источника, к примеру из базы данных. Однако в последнее время всё чаще приходится обращаться к сторонним API. В PHP есть расширение cURL (если активирован), которое позволяет осуществлять запросы к сторонним сервисам. Если вы не хотите сами настраивать POST или GET запросы через cURL, то библиотека Guzzle как раз для вас.

Guzzle это простой HTTP клиент для PHP. Инициализировать Guzzle очень просто: для начала вам понадобится composer. После этого создайте файл composer.json, с следующим содержанием:

{
     "name": "jd/guzzle demo",
     "authors": [
         {
             "name": "John Doe",
             "email": "john@doe.tst"
         }
     ],
     "require": {

     }
 }

Добавляем в поле зависимость (require) библиотеку guzzle:

{
     "name": "jd/guzzle demo",
     "authors": [
         {
             "name": "John Doe",
             "email": "john@doe.tst"
         }
     ],
     "require": {
         "guzzle/guzzle": "~3.7"
     }
 }

Сохраняем файл и запускаем команду composer install, которая сама скачает библиотеку и создаст файл автозагрузки!

Основы

Теперь давайте рассмотрим API библиотеки Guzzle:

<?php
 chdir(dirname(__DIR__));

 require_once 'vendor/autoload.php';

 use Guzzle\Http\Client;
 use Guzzle\Http\EntityBody;
 use Guzzle\Http\Message\Request;
 use Guzzle\Http\Message\Response;

 /** @var $client Client */
 $client = new Client("https://qrng.anu.edu.au");

Первые две строки должны быть знакомы всем, кто сталкивался с автозагрузкой файлов, сгенерированных composer-ом. При инициализации объекта Client, нам необходимо передать URL, к котором хотим подключиться. Обратите внимание, что мы передаём базовый URL, без параметров.

/** @var $request Request */
 $request = $client->get('/API/jsonI.php?length=10&type=uint8');

 /** @var $response Response */
 $response = $request->send();

 /** @var $body EntityBody */
 $body = $response->getBody(true);

Затем мы задаём путь (/API/jsonI.php); URL параметры (length=10&type=uint8), и указываем тип запроса (GET), вызовом метода $client->get(). Если нам нужно будет выполнить POST запрос, то необходимо воспользоваться методом post(). Для выполнения запроса, вызываем $request->send() и помещаем результат в переменную $response. Если нам необходимо получить ответ от стороннего сервера, воспользуемся методом $response->getBody(). Для получения результата в виде строки, передаём значение TRUE.

Настройка URL параметров

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

/** @var $request Request */
 $request = $client->createRequest();

 $request->setPath('/API/jsonI.php');

 $request->getQuery()
     ->set('length', 10)
     ->set('type', 'uint8');

Во-первых, создаём пустой запрос, вызвав метод $client->createRequest(). Далее можем воспользоваться методом setPath() или getQuery() для формирования строки запроса и параметров.