Работа с API не обходится без взаимодействия с HTTP-запросами. Кто-то не заморачивается и использует глобальные массивы $_GET, $_POST и $_REQUEST. Признаться, сам так делал, но не так давно озадачился мыслью о необходимости какой-нибудь обёртки для удобства использования. Может быть, подобные библиотеки уже и есть, но я их пока не нашёл, кроме как в API Битрикса (возможно, плохо искал), а посему решил написать свою. К тому же согласитесь, что гораздо приятнее использовать свои библиотеки при работе с кодом.
Библиотека работает пока с методами GET и POST, а также с json-стройкой, получаемой из php://input. Ещё умеет делать проверку на https и получать заголовки.
Подключение и вызов
Для подключения библиотеки используйте Composer:
composer require ramapriya/http-request
require __DIR__ . '/vendor/autoload.php';
use Ramapriya\Request\Request;
Проверка метода
Теперь можно пользоваться библиотекой. К примеру, хотите вы узнать тип запроса, вызываете метод GetRequestMethod():
$method = Request::GetRequestMethod();
switch($method) {
case 'GET':
// ваш код
break;
case 'POST':
// ваш код
break;
}
Однако обычно тип метода заранее известен, поэтому чтобы не создавать дополнительные переменные, достаточно использовать методы для проверки get и post — isGet() и isPost() соответственно:
if(Request::isPost() !== false) {
// ваш код
} else if(Request::isGet() !== false) {
// ваш код
}
Получение ключей
Бывает, что нужно получить список параметров запроса (не значений, а самих ключей), для этого также есть два метода для Get и Post:
$GetParams = Request::GetParams();
if(in_array($needle, $GetParams)) {
// ваш код
}
$postParams = Request::PostParams();
if(in_array($needle, $postParams)) {
// ваш код
}
Получение значений
Ну и конечно, не обошлось и без методов получения самих значений параметров — Get() и Post(). Самое интересное, что можно получить, как отдельные параметры, так и весь массив целиком (который, кстати, преобразован в объект — не спрашивайте почему, просто мне нравится работать с объектами):
if(!empty(Request::Get('user'))) {
$user = Request::Get('user');
}
$request = Request::Post();
if(Request::isPost() && !empty($request)) {
// ваш код
}
Сырые запросы (php://input)
Отдельно стоит остановиться на методах работы с php://input. Это isRaw() — проверяет на сырой запрос, Raw(), возвращающий сконвертированную в объект json-строку и RawParams(), возвращающий ключи запроса. Помню, когда работал с API Sendpulse, приходилось писать примерно так:
$rawRequest = file_get_contents('php://input');
$request = json_decode($rawRequest);
if(!empty($request)) {
// полезный код
}
Конечно, можно было обойтись одной переменной
$request = json_decode(file_get_contents('php://input'));
Но согласитесь, выглядит это достаточно запутанно.
С методами Raw() и isRaw() код уже вызывает больше эстетического удовольствия:
if(Request::isRaw() === true) {
$request = Request::Raw();
}
Работа с заголовками
Также в библиотеке есть несколько методов работы с заголовками:
GetAllHeaders() — получение всех заголовков.
$headers = Request::GetAllHeaders();
GetHostName() — получение имени хоста
$domain = Request::GetHostName();
isHttps() — проверка на https
if(Request::isHttps() !== true) {
die("Application works only with HTTPS!");
}
GetUserAgent() — получение юзер-агента. Кому-то это бывает важно.
$userAgent = Request::GetUserAgent();
Библиотека будет дополняться и модифицироваться. Исходный код, как всегда, на гитхабе
Спасибо за внимание.
negasus
Как наcчет guzzle? Одна из самых популярных в PHP?
rowaxi
guzzle is HTTP client.
А здесь обертка над "$_GET, $_POST и $_REQUEST" и даже зачем-то используется php://input из которого анализируется json строка.
negasus
А, кажется я поторопился, и не так понял назначение пакета. Это скорее про http сервер. Ну ок. В любом случае, уверен, что готовые пакеты есть. Оттестированные и широко используемые. Я не то, чтобы против велосипедов. Просто несколько странно читать, что на такой популярный кейс «не нашлось пакетов»