Како користити вдзвдз АПИ са ПХП клијентима

У овом водичу ћемо проћи кроз различите ПХП клијенте које можете користити за повезивање на вдзвдз АПИ.

Конкретно, покриваћемо коришћење вдзвдз АПИ-ја са функцијом филе_гет_цонтентс, Гуззле, ХТТПфул и Симфони ХТТПС клијентом.

Шта је вдзвдз АПИ?

вдзвдз пружа скуп бесплатних алата које можете користити за праћење перформанси ваше веб странице. Ови алати укључују анализатор покварене везе, време за учитавање и ДНС проверач. Овим алатима се може приступити на мрежи преко веб интерфејса или АПИ-ја.

АПИ је заснован на ХТТП-у и може му се приступити из било ког програмског језика са ХТТП клијент библиотеком. АПИ има великодушан бесплатни ниво који можете почети да користите без потребе за пружањем информација о плаћању.

Оно што ћемо да градимо

Написаћемо скрипту, извршну из командне линије, која ће израчунати колико је времена потребно да се учита Гоогле веб локација и одштампа на терминалу. Применићемо овај једноставан програм користећи различите ПХП ХТТП клијенте да бисмо демонстрирали како изгледа коришћење АПИ-ја.

Конкретно, користићемо уграђене функције – филе_гет_цонтентс() и пхп_цурл, као и екстензију Гуззле ПХП. Колико год ови примери изгледали једноставни, они показују основне концепте коришћења вдзвдз АПИ-ја.

Предуслови

Да бисте то пратили, мораћете претходно да познајете ПХП и да га инсталирате на свом рачунару. Поред тога, биће вам потребан Цомпосер за управљање екстензијама.

На крају, биће вам потребан и уређивач текста за писање кода. У мом случају, користићу Висуал Студио Цоде, популарни Мицрософтов едитор текста отвореног кода. Можете га преузети са веб локације Висуал Студио Цоде.

вдзвдз АПИ преглед

вдзвдз АПИ има различите крајње тачке у зависности од тога шта желите да урадите. Комплетну листу крајњих тачака и њихову придружену документацију можете пронаћи на страници са документацијом.

Креирање вдзвдз налога

Да бисте почели да користите АПИ, мораћете да направите налог тако што ћете отићи на одредишну страницу АПИ-ја и кликнути на дугме за регистрацију. Када се регистрација заврши, бићете одведени на контролну таблу, где ћете видети свој АПИ кључ. Контролна табла треба да буде као на слици испод. Зацрнио сам свој АПИ кључ из сигурносних разлога.

У сваком АПИ захтеву који упутите, мораћете да наведете овај кључ као заглавље захтева. Ускоро ћете видети како се то може учинити.

Са креираним вдзвдз налогом и инсталираним ПХП-ом, можемо започети креирање пројекта.

Креирање фасцикле пројекта

Прво, направите фасциклу у којој ћемо чувати датотеке пројекта. Након тога, креирајте следеће датотеке

  • .енв
  • витх_цурл.пхп
  • витх_филе_гет_цонтентс.пхп
  • витх_гуззле.пхп

Након тога, покрените следећу команду да бисте инсталирали проширење влуцас/пхпдотенв и гуззлехттп/гуззле

composer require vlucas/phpdotenv guzzlehttp/guzzle

У овом тренутку, фасцикла вашег пројекта би требало да изгледа овако:

Сада отворите .енв датотеку и додајте следећу линију кода, замењујући <иоур-апи-кеи> вашим стварним АПИ кључем са вдзвдз контролне табле:

API_KEY=<your-api-key>

Коришћење филе_гет_цонтентс()

Први метод који бисмо могли да користимо за израду ХТТП захтева је позивање функције филе_гет_цонтентс() која је уграђена у ПХП. Потпис функције функције филе_гет_цонтентс() је следећи:

file_get_contents(path, include_path, context)

Иако се метода често користи за читање садржаја датотеке у локалном складишту, можемо је користити за читање веб ресурса, као што су подаци које враћа АПИ крајња тачка.

Сада да бисте започели, отворите витх_филе_гет_цонтентс.пхп и додајте шаблонски ПХП код.

<?php
   // all the code to be inserted here
?>

Затим можемо почети са учитавањем екстензија. Додајте следећи ред кода у своју датотеку

require_once('vendor/autoload.php');

Затим можемо учитати наше променљиве окружења, које укључују АПИ кључ

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

Затим можемо дефинисати носивост. Ово ће бити подаци које ћемо послати као део тела захтева

$payload = json_encode([
    "url" => "https://www.google.com", 
    "proxyCountry" => "us",
    "followRedirect" => true
]);

Направили смо променљиву корисног оптерећења и доделили је ЈСОН стрингу који садржи урл, прокиЦоунтри и фолловРедирецт као својства.

Својство урл наводи веб страницу чије време учитавања желимо да проверимо.

ПрокиЦоунтри је локација сервера који желимо да користимо за подношење захтева. У овом случају користимо сервер у САД, али можете бирати између Индије, Кине, Велике Британије и Француске. За више детаља можете прочитати документацију.

Затим фолловРедирецт одређује да ли прокси сервер треба да прати било које преусмеравање и мери време одговора коначног одговора или првог преусмеравања.

Након тога, можемо креирати опције које ће конфигурисати наш захтев додавањем овог кода:

$options = [
    "http" => [
        "method" => "POST",
        "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']),
        "content" => $payload
    ] 
];

Овим смо направили објекат опција који наводи да је наш ХТТП метод ПОСТ и имамо заглавље које наводи два својства, тип садржаја као ЈСОН и к-апи-кључ као АПИ кључ који сте навели у .енв датотеку и учитана је као променљива окружења.

Затим можемо да упутимо захтев тако што ћемо креирати ток у који ће наше опције бити написане:

$context = stream_context_create($options);

Затим позивамо метод филе_гет_цонтентс() да бисмо направили захтев и сачували одговор као променљиву.

$response = file_get_contents("https://api.techblog.co.rs.com/loadtime", false, $context);

Упутили смо захтев на хттпс://апи.вдзвдз.цом/лоадтиме. Нетачно говори ПХП-у да не користи путању. И ми прослеђујемо контекст који смо креирали методу.

Да бисмо приказали одговор, користићемо излаз на следећи начин.

echo "Loadtime: " . json_decode($response)->data->total . "n";

На крају овога, ваша датотека би требало да изгледа овако:

<?php
    require_once('vendor/autoload.php');

    $dotenv = DotenvDotenv::createImmutable(__DIR__);
    $dotenv->load();

    $payload = json_encode([
        "url" => "https://www.google.com", 
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $options = [
        "http" => [
            "method" => "POST",
            "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']),
            "content" => $payload
        ] 
    ];

    $context = stream_context_create($options);

    $response = file_get_contents("https://api.techblog.co.rs.com/loadtime", false, $context);

    echo "Loadtime: " . json_decode($response)->data->total . "n";
?>

Када покренете датотеку помоћу следеће команде:

php with_file_get_contents.php

Добићете следећи излаз

Loadtime: 81

Коришћење цУРЛ-а

цУРЛ је услужни програм командне линије који се користи за прављење УРЛ захтева на страни клијента. У ПХП-у се може користити помоћу услужног програма пхп-цурл. Да бисте почели да га користите, отворите датотеку витх_цурл.пхп и напишите шаблонски ПХП

<?php
    // all new code will be written here
?>

Затим дозволите да увеземо екстензије и учитамо АПИ_КЕИ променљиву окружења дефинисану у .енв датотеци

require_once('vendor/autoload.php');

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

Затим ћемо креирати променљиву за чување заглавља нашег објекта као низ где је сваки појединачни елемент у низу одређено заглавље.

$header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

Дефинисали смо два заглавља, једно за тип садржаја и једно за АПИ кључ.

Тада можемо дефинисати тело захтева.

$body = json_encode([
    "url" => "google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

Након овога, можемо креирати цурл сесију помоћу функције цурл_инит(). Можемо да проследимо УРЛ на који желимо да упутимо захтев као аргумент позиву функције.

$ch = curl_init("https://api.techblog.co.rs.com/loadtime");

Сада можемо све да саставимо тако што ћемо дефинисати заглавље и тело као опције за сесију. За ово ћемо користити функцију цурл_сетопт_арраи().

curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => $header,
    CURLOPT_POSTFIELDS => $body
]);

Да бисмо направили захтев, позваћемо функцију цурл_екец().

$response = curl_exec($ch);

Одговор смо сачували у променљивој $респонсе, тако да можемо да затворимо сесију да бисмо ослободили системске ресурсе које сесија користи.

curl_close($ch);

На крају, можемо одштампати одговор на екран користећи вар_думп.

var_dump($response);

На крају, ваша датотека скрипте треба да изгледа овако

<?php
    require_once('vendor/autoload.php');

    $dotenv = DotenvDotenv::createImmutable(__DIR__);
    $dotenv->load();

    $header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

    $body = json_encode([
        "url" => "google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $ch = curl_init("https://api.techblog.co.rs.com/loadtime");

    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_POSTFIELDS => $body
    ]);

    $response = curl_exec($ch);

    curl_close($ch);

    var_dump($response);
?>

Када покренемо скрипту користећи пхп витх_цурл.пхп, требало би да добијете следећи излаз:

{"timestamp":1666083632547,"apiStatus":"success","apiCode":200,"meta":{"url":"google.com","followRedirect":true,"redirectedURL":"https://www.google.com/?gws_rd=ssl","test":{"id":"d20h1hb409qbfwm0g534l51asugpi5hl"}},"data":{"dns":12,"connect":17,"tls":6,"send":21,"wait":110,"total":114}}bool(true)

Захтев је успешно завршен, а АПИ је одговорио са ЈСОН0 подацима. Можете користити ове податке како желите.

Са Гузлом

У последњем делу овог упутства користићемо Гуззле да напишемо скрипту. Као и увек, почињемо уметањем ПХП шаблона унутар витх_гуззле.пхп

<?php
    // all the code will go here
?>

Затим можемо увести екстензије и Гуззле Цлиент и Рекуест Објецтс и учитати променљиве окружења.

require_once('vendor/autoload.php');

use GuzzleHttpClient;
use GuzzleHttpPsr7Request;

Затим можемо учитати променљиве окружења.

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

Након тога, можемо инстанцирати Гуззле ХТТП клијента

$client = new GuzzleHttpClient();

Затим можемо наставити са креирањем заглавља за наш захтев

$headers = [
    'x-api-key' => $_ENV['API_KEY'],
    'Content-Type' => 'application/json'
];

Затим можемо дефинисати тело захтева

$body = json_encode([
    "url" => "google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

Затим можемо да упутимо захтев тако што ћемо инстанцирати класу Рекуест и проследити УРЛ крајње тачке АПИ-ја, заглавље и тело.

$request = new Request('POST', 'https://api.techblog.co.rs.com/loadtime', $headers, $body);

Затим можемо послати захтев додавањем ове линије кода:

$response = $client->sendAsync($request)->wait();

Када се захтев пошаље, тело захтева можемо да примимо на следећи начин

$response_body = $response->getBody();

На крају, можемо декодирати ЈСОН одговор и одштампати време учитавања

echo "Loadtime: " . json_decode($response_body)->data->total . "n";

Дакле, на крају, датотека би требало да изгледа овако:

<?php
    require_once('vendor/autoload.php');

    use GuzzleHttpClient;
    use GuzzleHttpPsr7Request;

    $dotenv = DotenvDotenv::createImmutable(__DIR__);
    $dotenv->load();
    

    $client = new GuzzleHttpClient();

    $headers = [
        'x-api-key' => $_ENV['API_KEY'],
        'Content-Type' => 'application/json'
    ];

    $body = json_encode([
        "url" => "google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $request = new Request('POST', 'https://api.techblog.co.rs.com/loadtime', $headers, $body);

    $response = $client->sendAsync($request)->wait();

    $response_body = $response->getBody();

    echo "Loadtime: " . json_decode($response_body)->data->total . "n";
?>

А када извршите скрипту помоћу следеће команде:

$php with_guzzle.php

И видећете одговор:

Loadtime: 130

Закључак

У овом чланку смо прошли кроз различите клијенте које бисте можда желели да користите када креирате ПХП пројекат који ће захтевати вдзвдз АПИ.

Док скрипте у овом пројекту користе командну линију као примарни облик излаза, пројекти из стварног света могу да представе одговор на веб страници или да га запишу у датотеку. Примери скрипти у овом чланку били су једноставни, али показују основне концепте коришћења вдзвдз АПИ-ја. Да бисте користили различите АПИ-је, можете променити крајњу тачку и проследити различите опције у телу захтева.

Можда ће вас такође занимати како да користите вдзвдз ДНС Лоокуп АПИ у Јавасцрипт-у.