Un autre vélo: une bibliothèque simple pour travailler avec les requêtes HTTP

Bonjour à tous.

Travailler avec l'API n'est pas terminé sans interagir avec les requêtes HTTP. Quelqu'un ne dérange pas et utilise les tableaux globaux $ _GET, $ _POST et $ _REQUEST. Franchement, je l'ai fait moi-même, mais il n'y a pas si longtemps, j'étais perplexe à l'idée de la nécessité d'une sorte d'emballage pour une facilité d'utilisation. Peut-être qu'il existe déjà de telles bibliothèques, mais je ne les ai pas encore trouvées, sauf dans l'API Bitrix (peut-être que j'ai mal regardé), et j'ai donc décidé d'écrire la mienne. De plus, vous devez convenir qu'il est beaucoup plus agréable d'utiliser vos bibliothèques lorsque vous travaillez avec du code.

La bibliothèque fonctionne jusqu'à présent avec les méthodes GET et POST, ainsi qu'avec la construction json obtenue à partir de php: // input. Il sait également comment vérifier https et obtenir des en-têtes.

Connexion et appel


Pour connecter la bibliothèque, utilisez Composer:

composer require ramapriya/http-request

require __DIR__ . '/vendor/autoload.php';

use Ramapriya\Request\Request;

Vérification de la méthode


Vous pouvez maintenant utiliser la bibliothèque. Par exemple, si vous souhaitez connaître le type de demande, appelez la méthode GetRequestMethod () :

$method = Request::GetRequestMethod();

switch($method) {
    case 'GET':
        //  
        break;
    case 'POST':
        //  
        break;
}

Cependant, généralement le type de la méthode est connu à l'avance, donc pour ne pas créer de variables supplémentaires, il suffit d'utiliser les méthodes pour vérifier get et post - isGet () et isPost (), respectivement:

if(Request::isPost() !== false) {
   //  
} else if(Request::isGet() !== false) {
   //  
}

Réception des clés


Il arrive que vous ayez besoin d'obtenir une liste de paramètres de requête (pas les valeurs, mais les clés elles-mêmes), il existe également deux méthodes pour cela pour Get et Post:

$GetParams = Request::GetParams();

if(in_array($needle, $GetParams)) {
   //  
}

$postParams = Request::PostParams();

if(in_array($needle, $postParams)) {
   //  
}

Obtenir des valeurs


Et bien sûr, il y avait quelques méthodes pour obtenir les valeurs des paramètres elles-mêmes - Get () et Post () . La chose la plus intéressante est que vous pouvez obtenir à la fois des paramètres individuels et l'ensemble du tableau (qui, soit dit en passant, est converti en objet - ne demandez pas pourquoi, j'aime juste travailler avec des objets):

if(!empty(Request::Get('user'))) {
   $user = Request::Get('user');
}

$request = Request::Post();
if(Request::isPost() && !empty($request)) {
   //  
}

Demandes brutes (php: // input)


Nous devrions également nous attarder sur les méthodes de travail avec php: // input. This isRaw () - recherche une requête brute, Raw () , qui retourne la chaîne json convertie en un objet, et RawParams () , qui retourne les clés de requête. Je me souviens quand je travaillais avec l'API Sendpulse, j'ai dû écrire quelque chose comme ceci:

$rawRequest = file_get_contents('php://input');
$request = json_decode($rawRequest);

if(!empty($request)) {
   //  
}

Bien sûr, une variable pourrait être supprimée.
$request = json_decode(file_get_contents('php://input'));

Mais vous devez admettre que cela semble assez déroutant.

Avec les méthodes Raw () et isRaw () , le code provoque déjà plus de plaisir esthétique:

if(Request::isRaw() === true) {
$request = Request::Raw();
}

Travailler avec des en-têtes


Il existe également plusieurs méthodes pour travailler avec les en-têtes dans la bibliothèque:

GetAllHeaders () - obtenir tous les en-têtes.
$headers = Request::GetAllHeaders();

GetHostName () - obtention du nom d'hôte
$domain = Request::GetHostName();

isHttps () - recherchez https

if(Request::isHttps() !== true) {
   die("Application works only with HTTPS!");
}

GetUserAgent () - obtention de l'agent utilisateur. Cela peut être important pour quelqu'un.

$userAgent = Request::GetUserAgent();

La bibliothèque sera complétée et modifiée. Le code source, comme toujours, sur github

Merci de votre attention.

All Articles