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

U ovom uputstvu, detaljno ćemo istražiti različite PHP klijente koje možete iskoristiti za uspostavljanje veze sa wdwdz API-jem.

Konkretno, objasnićemo kako se wdwdz API koristi sa funkcijom `file_get_contents`, zatim sa Guzzle, HTTPful i Symfony HTTP klijentom.

Šta je wdwdz API?

wdwdz nudi niz besplatnih alata koji vam omogućavaju da pratite performanse vaše web stranice. Ovi alati uključuju analizator pokvarenih linkova, alat za merenje vremena učitavanja i DNS proveru. Ovim alatima možete pristupiti online putem web interfejsa ili API-ja.

API je zasnovan na HTTP protokolu i dostupan je iz bilo kog programskog jezika koji ima podršku za HTTP klijent biblioteke. API nudi prilično obiman besplatni nivo koji možete početi koristiti odmah, bez potrebe za pružanjem informacija o plaćanju.

Šta ćemo kreirati

Razvićemo skriptu, izvršnu preko komandne linije, koja će izračunati vreme potrebno za učitavanje web stranice Google i prikazati to vreme u terminalu. Ovaj jednostavan program ćemo implementirati koristeći različite PHP HTTP klijente kako bismo ilustrovali upotrebu API-ja.

Konkretno, koristićemo ugrađene funkcije – `file_get_contents()` i `php_curl`, kao i Guzzle PHP ekstenziju. Iako su ovi primeri jednostavni, oni prikazuju osnovne koncepte rada sa wdwdz API-jem.

Preduslovi

Da biste pratili ovaj vodič, potrebno je da imate osnovno znanje PHP-a i da je PHP instaliran na vašem računaru. Dodatno, potreban vam je Composer za upravljanje ekstenzijama.

Na kraju, potreban vam je i editor teksta za pisanje koda. Ja ću koristiti Visual Studio Code, popularan Microsoft-ov editor teksta otvorenog koda, koji možete preuzeti sa zvanične web stranice.

wdwdz API pregled

wdwdz API ima različite krajnje tačke, u zavisnosti od toga šta želite da postignete. Kompletnu listu krajnjih tačaka i njihovu detaljnu dokumentaciju možete pronaći na stranici sa dokumentacijom.

Kreiranje wdwdz naloga

Da biste počeli da koristite API, potrebno je da kreirate nalog tako što ćete posetiti odredišnu stranicu API-ja i kliknuti na dugme za registraciju. Nakon završetka registracije, bićete preusmereni na kontrolnu tablu, gde ćete pronaći vaš API ključ. Kontrolna tabla bi trebalo da izgleda kao na slici ispod. Moj API ključ je zatamnjen iz bezbednosnih razloga.

U svakom API zahtevu koji šaljete, moraćete da navedete ovaj ključ kao zaglavlje zahteva. Uskoro ćete videti kako se to radi.

Sa kreiranim wdwdz nalogom i instaliranim PHP-om, možemo početi sa kreiranjem projekta.

Kreiranje fascikle projekta

Prvo, kreirajte fasciklu u kojoj ćemo čuvati datoteke projekta. Zatim, kreirajte sledeće datoteke:

  • .env
  • with_curl.php
  • with_file_get_contents.php
  • with_guzzle.php

Nakon toga, pokrenite sledeću komandu da biste instalirali ekstenzije `vlucas/phpdotenv` i `guzzlehttp/guzzle`:

composer require vlucas/phpdotenv guzzlehttp/guzzle

U ovom trenutku, vaša fascikla projekta bi trebalo da izgleda ovako:

Sada otvorite `.env` datoteku i dodajte sledeći red koda, zamenjujući `` vašim stvarnim API ključem sa wdwdz kontrolne table:

API_KEY=<your-api-key>

Korišćenje `file_get_contents()`

Prvi metod koji možemo koristiti za kreiranje HTTP zahteva je pozivanje funkcije `file_get_contents()`, koja je ugrađena u PHP. Potpis funkcije `file_get_contents()` je sledeći:

file_get_contents(path, include_path, context)

Iako se ova metoda najčešće koristi za čitanje sadržaja datoteke na lokalnom sistemu, možemo je koristiti i za čitanje web resursa, kao što su podaci koje vraća API krajnja tačka.

Za početak, otvorite `with_file_get_contents.php` i dodajte osnovni PHP kod:

<?php
   // sav kod će biti ubačen ovde
?>

Zatim možemo početi sa učitavanjem ekstenzija. Dodajte sledeći red koda u vašu datoteku:

require_once('vendor/autoload.php');

Zatim možemo učitati naše promenljive okruženja, koje uključuju i API ključ:

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

Zatim možemo definisati nosivost, odnosno podatke koje ćemo poslati kao deo tela zahteva:

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

Kreirali smo promenljivu `payload` i dodelili joj JSON string koji sadrži `url`, `proxyCountry` i `followRedirect` kao svojstva.

Svojstvo `url` navodi web stranicu čije vreme učitavanja želimo da proverimo.

`proxyCountry` je lokacija servera koji želimo da koristimo za slanje zahteva. U ovom slučaju koristimo server u SAD, ali možete birati između Indije, Kine, Velike Britanije i Francuske. Za više detalja, možete pročitati dokumentaciju.

Zatim, `followRedirect` određuje da li proxy server treba da prati bilo kakvo preusmeravanje i meri vreme odziva konačnog odgovora ili prvog preusmeravanja.

Nakon toga, možemo kreirati opcije koje će konfigurisati naš zahtev dodavanjem ovog koda:

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

Ovim smo kreirali objekat `options` koji navodi da je naš HTTP metod `POST` i da imamo zaglavlje koje navodi dva svojstva, tip sadržaja kao JSON i `x-api-key` kao API ključ koji ste naveli u `.env` datoteci i koji je učitan kao promenljiva okruženja.

Zatim možemo uputiti zahtev kreiranjem toka u koji će naše opcije biti upisane:

$context = stream_context_create($options);

Zatim pozivamo metod `file_get_contents()` da bismo napravili zahtev i sačuvali odgovor kao promenljivu:

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

Uputili smo zahtev na `https://api.wdwdz.com/loadtime`. `false` govori PHP-u da ne koristi putanju. Takođe, prosleđujemo `context` koji smo kreirali metodu.

Da bismo prikazali odgovor, koristićemo izlaz na sledeći način:

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

Na kraju, vaša datoteka bi trebalo da izgleda ovako:

<?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";
?>

Kada pokrenete datoteku pomoću sledeće komande:

php with_file_get_contents.php

Dobićete sledeći izlaz:

Loadtime: 81

Korišćenje cURL-a

cURL je alat komandne linije koji se koristi za slanje URL zahteva na strani klijenta. U PHP-u se može koristiti putem uslužnog programa `php-curl`. Da biste počeli da ga koristite, otvorite datoteku `with_curl.php` i napišite osnovni PHP kod:

<?php
    // sav novi kod će biti napisan ovde
?>

Zatim, dozvolite da uvezemo ekstenzije i učitamo `API_KEY` promenljivu okruženja definisanu u `.env` datoteci:

require_once('vendor/autoload.php');

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

Zatim ćemo kreirati promenljivu za čuvanje zaglavlja našeg objekta kao niza, gde je svaki pojedinačni element u nizu definisano zaglavlje:

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

Definisali smo dva zaglavlja, jedno za tip sadržaja i jedno za API ključ.

Tada možemo definisati telo zahteva:

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

Nakon ovoga, možemo kreirati cURL sesiju pomoću funkcije `curl_init()`. Možemo proslediti URL na koji želimo da uputimo zahtev kao argument pozivu funkcije:

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

Sada možemo sve da sastavimo tako što ćemo definisati zaglavlje i telo kao opcije za sesiju. Za ovo ćemo koristiti funkciju `curl_setopt_array()`:

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

Da bismo napravili zahtev, pozvaćemo funkciju `curl_exec()`:

$response = curl_exec($ch);

Odgovor smo sačuvali u promenljivoj `$response`, tako da možemo zatvoriti sesiju da bismo oslobodili sistemske resurse koje sesija koristi:

curl_close($ch);

Na kraju, možemo prikazati odgovor na ekranu pomoću `var_dump`:

var_dump($response);

Na kraju, vaša datoteka skripte bi trebalo da izgleda ovako:

<?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);
?>

Kada pokrenemo skriptu koristeći `php with_curl.php`, trebalo bi da dobijete sledeći izlaz:

{"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)

Zahtev je uspešno izvršen, a API je odgovorio sa JSON podacima. Možete koristiti ove podatke po želji.

Sa Guzzle-om

U poslednjem delu ovog uputstva, koristićemo Guzzle da napišemo skriptu. Kao i uvek, počinjemo umetanjem PHP šablona unutar `with_guzzle.php`:

<?php
    // sav kod će ići ovde
?>

Zatim možemo uvesti ekstenzije i Guzzle Client i Request Objekte i učitati promenljive okruženja:

require_once('vendor/autoload.php');

use GuzzleHttpClient;
use GuzzleHttpPsr7Request;

Zatim možemo učitati promenljive okruženja:

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

Nakon toga, možemo instancirati Guzzle HTTP klijenta:

$client = new GuzzleHttpClient();

Zatim možemo nastaviti sa kreiranjem zaglavlja za naš zahtev:

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

Zatim možemo definisati telo zahteva:

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

Zatim možemo uputiti zahtev tako što ćemo instancirati klasu Request i proslediti URL krajnje tačke API-ja, zaglavlje i telo:

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

Zatim možemo poslati zahtev dodavanjem ove linije koda:

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

Kada se zahtev pošalje, telo zahteva možemo da primimo na sledeći način:

$response_body = $response->getBody();

Na kraju, možemo dekodirati JSON odgovor i prikazati vreme učitavanja:

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

Dakle, na kraju, datoteka bi trebalo da izgleda ovako:

<?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";
?>

A kada izvršite skriptu pomoću sledeće komande:

$php with_guzzle.php

I videćete odgovor:

Loadtime: 130

Zaključak

U ovom članku smo prošli kroz različite klijente koje biste možda želeli da koristite kada kreirate PHP projekat koji će zahtevati wdwdz API.

Iako skripte u ovom projektu koriste komandnu liniju kao primarni oblik izlaza, projekti iz stvarnog sveta mogu da prikažu odgovor na web stranici ili da ga zapišu u datoteku. Primeri skripti u ovom članku su jednostavni, ali pokazuju osnovne koncepte korišćenja wdwdz API-ja. Da biste koristili različite API-je, možete promeniti krajnju tačku i proslediti različite opcije u telu zahteva.

Možda će vas takođe zanimati kako da koristite wdwdz DNS Lookup API u JavaScript-u.