Pull to refresh

Ещё один велосипед: простая библиотека для работы с HTTP-запросами

Reading time3 min
Views4.1K
Всем привет.

Работа с 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();

Библиотека будет дополняться и модифицироваться. Исходный код, как всегда, на гитхабе

Спасибо за внимание.
Tags:
Hubs:
-6
Comments17

Articles