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

от автора

Всем привет.

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

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

Спасибо за внимание.

ссылка на оригинал статьи https://habr.com/ru/post/500054/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *