В современном мире веб-приложения часто зависят от сервисов, которые предоставляют сторонние приложения через REST API. Эти приложения открывают доступ к определённым точкам, где вы можете получать, обновлять или удалять информацию в зависимости от вашего запроса. Однако, чтобы сделать это на вашем сервере, вам нужен подходящий Http-клиент, который будет выполнять запросы за вас. На рынке представлено множество библиотек, и выбор подходящей может быть непростым. Вам нужно самостоятельно решить, какая библиотека лучше всего соответствует вашим требованиям, основываясь на её возможностях. В этой статье мы расскажем о семи лучших клиентских библиотеках Http для PHP, которые упростят взаимодействие с приложениями по всему миру через API.
Yii2 Httpclient
Httpclient Yii2 является расширением платформы Yii Framework и позволяет вам реализовать полезный Http-клиент с помощью пары строк кода. Чтобы отправлять HTTP-запросы, вам нужно создать экземпляр [[\yii\httpclient\Client]] и использовать его метод createRequest() для создания нового HTTP-запроса. Затем вам следует настроить все параметры запроса в соответствии с вашей целью и отправить запрос. В результате вы получите экземпляр [[\yii\httpclient\Response]], который содержит всю информацию об ответе и данные. Например:
use yii\httpclient\Client;
$client = new Client();
$response = $client->createRequest()
->setMethod('POST')
->setUrl('http://example.com/api/1.0/users')
->setData(['name' => 'John Doe', 'email' => 'johndoe@example.com'])
->send();
if ($response->isOk) {
$newUserId = $response->data['id'];
}
Buzz
Buzz – это облегченная библиотека PHP 5.3 для отправки HTTP-запросов. Buzz был создан Крисом Уоллсмитом в 2010 году. За прошедшие годы проект стал очень популярным, его загрузили более 7 миллионов раз. С августа 2017 года Тобиас Найхолм поддерживает эту библиотеку. Идея Buzz останется прежней: у нас должен быть простой API и имитация поведения браузера для удобства тестирования. Нам не следует изобретать велосипед, и мы не должны быть такими же мощными и гибкими, как другие клиенты (например, жадничать). Тем не менее, мы очень серьезно относимся к производительности.
Мы действительно любим PSR, и это список пожеланий, которые мы хотели бы поддержать в PSR:
- PSR-1 (Code style)
- PSR-2 (Code style)
- PSR-4 (Auto loading)
- PSR-7 (HTTP messages)
- PSR-15 (HTTP middlewares)
- PSR-17 (HTTP factories)
- PSR-18 (HTTP client)
Синтаксис Buzz также удобен и прост в написании:
<?php
$browser = new Buzz\Browser();
$response = $browser->get('http://www.google.com');
echo $browser->getLastRequest()."\n";
// $response is an object.
// You can use $response->getContent() or $response->getHeaders() to get only one part of the response.
echo $response;
Requests
Requests – это HTTP-библиотека, написанная на PHP и предназначенная исключительно для удобства использования. Она в общих чертах основана на API из превосходной библиотеки Requests Python. Requests имеет лицензию ISC (аналогичную новой лицензии BSD) и не имеет зависимостей, за исключением PHP 5.2+. Несмотря на то, что PHP используется в качестве веб-языка, его инструментов для отправки HTTP-запросов крайне не хватает. У cURL, мягко говоря, интересный API, и вы не всегда можете положиться на его доступность. Сокеты предоставляют только низкоуровневый доступ и требуют, чтобы вы сами выполняли большую часть синтаксического анализа HTTP-ответов. Его синтаксис довольно дружелюбен и прост в использовании:
$headers = array('Accept' => 'application/json');
$options = array('auth' => array('user', 'pass'));
$request = Requests::get('https://api.github.com/gists', $headers, $options);
var_dump($request->status_code);
// int(200)
var_dump($request->headers['content-type']);
// string(31) "application/json; charset=utf-8"
var_dump($request->body);
// string(26891) "[...]"
Requests позволяют отправлять HTTP-запросы HEAD, GET, POST, PUT, DELETE и PATCH. Вы можете добавлять заголовки, данные формы, составные файлы и параметры с помощью простых массивов и получать доступ к данным ответа таким же образом. В Requests используются cURL и fsockopen, в зависимости от того, что доступно в вашей системе, но они устраняют все неприятные моменты, предоставляя согласованный API.
Httplug
PHP-HTTP – это следующий шаг в стандартизации HTTP-взаимодействия для PHP-пакетов. Он основан на PSR-7, который определяет интерфейсы для HTTP-запросов и ответов. Однако PSR-7 не описывает, как вы должны создавать запросы или отправлять их. PHP-HTTP стремится восполнить этот пробел, предлагая клиентский интерфейс HTTP: HTTPlug.
PHP-HTTP преследует три цели:
- Поощряйте разработчиков пакетов полагаться на простой интерфейс HTTPlug, а не на конкретные HTTP-клиенты.
- Предоставляйте сообществу PHP высококачественные пакеты, связанные с HTTP.
- Со временем сделайте HTTPlug рекомендацией по стандартам PHP (PSR), чтобы клиенты могли напрямую внедрять интерфейс HTTPlug и наши адаптеры больше не требовались.
HTTPlug использует HTTP-клиенты, написанные на PHP, и предлагает простой интерфейс. Он также предоставляет независимую от реализации систему плагинов для создания конвейеров независимо от используемой реализации HTTP-клиента.
Httpful
Httpful – это простая, понятная библиотека PHP, предназначенная для того, чтобы упростить использование HTTP. Она позволяет разработчику сосредоточиться на взаимодействии с API вместо просмотра страниц curl set_opt и является идеальным клиентом для PHP REST. Функции Httpful:
- Поддержка удобочитаемых HTTP-методов (GET, PUT, POST, DELETE, HEAD и ОПЦИИ)
- Пользовательские заголовки
- Автоматический “умный” синтаксический анализ
- Автоматическая сериализация полезной нагрузки
- Базовая аутентификация
- Аутентификация сертификата на стороне клиента
- Запросить “Шаблоны”
// Make a request to the GitHub API with a custom
// header of "X-Trvial-Header: Just as a demo".
$url = "https://api.github.com/users/nategood";
$response = \Httpful\Request::get($url)
->expectsJson()
->withXTrivialHeader('Just as a demo')
->send();
echo "{$response->body->name} joined GitHub on " .
date('M jS', strtotime($response->body->created_at)) ."\n";
Unirest PHP
Unirest – это набор облегченных HTTP-библиотек, доступных на нескольких языках, созданных и поддерживаемых компанией Mashape, которая также поддерживает API Gateway Kong с открытым исходным кодом. Эта библиотека содержит:
- Служебные методы для вызова запросов GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH
- Поддерживает параметры формы, загрузку файлов и пользовательские основные объекты
- Поддерживает gzip
- Supports Basic, Digest, Negotiate, NTLM Authentication natively
- Настраиваемый тайм-аут
- Настраиваемые заголовки по умолчанию для каждого запроса (DRY)
- Automatic JSON parsing into a native object for JSON responses
$headers = array('Accept' => 'application/json');
$query = array('foo' => 'hello', 'bar' => 'world');
$response = Unirest\Request::post('http://mockbin.com/request', $headers, $query);
$response->code; // HTTP Status code
$response->headers; // Headers
$response->body; // Parsed body
$response->raw_body; // Unparsed body
Guzzle
Guzzle – это HTTP-клиент на PHP, который упрощает отправку HTTP-запросов и интеграцию с веб-сервисами. Особенности Guzzle:
- Простой интерфейс для создания строк запросов, POST-запросов, потоковой передачи больших загрузок, потоковой передачи больших загрузок, использования HTTP-файлов cookie, загрузки данных в формате JSON и т.д…
- Может отправлять как синхронные, так и асинхронные запросы, используя один и тот же интерфейс.
- Использует интерфейсы PSR-7 для запросов, ответов и потоков. Это позволяет вам использовать другие библиотеки, совместимые с PSR-7, с Guzzle.
- Абстрагируется от базового HTTP-транспорта, позволяя вам писать независимый от среды и транспорта код, т.е. не зависеть от cURL, потоков PHP, сокетов или неблокирующих циклов обработки событий.
- Система промежуточного программного обеспечения позволяет вам расширять и корректировать поведение клиента.
$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.github.com/user', [
'auth' => ['user', 'pass']
]);
echo $res->getStatusCode();
// "200"
echo $res->getHeader('content-type');
// 'application/json; charset=utf8'
echo $res->getBody();
// {"type":"User"...'
Если вы знаете еще одну замечательную клиентскую библиотеку Http для PHP, пожалуйста, поделитесь ею с сообществом в поле для комментариев.