Jak pracovat s API etechblog.cz v prostředí NodeJS
V tomto návodu si ukážeme, jak efektivně využívat API platformy etechblog.cz v prostředí NodeJS. Vytvoříme jednoduchý skript, který po spuštění vypíše IP adresy serverů Google. Pro komunikaci s API etechblog.cz konkrétně využijeme endpoint pro DNS záznamy.
Celý proces si předvedeme pomocí tří různých metod. První varianta bude využívat nativní modul https
, který je součástí NodeJS. Druhá metoda bude založena na knihovně node-fetch
a nakonec se seznámíme s využitím populární knihovny axios
.
Co je etechblog.cz API?
etechblog.cz je platforma, která nabízí rozmanité nástroje, API a zdroje pro rozvoj online podnikání. Jednou z klíčových součástí je API, které umožňuje efektivní správu výkonu, zabezpečení a monitorování webových stránek. K dispozici je velkorysá bezplatná verze, kterou můžete využít.
Požadavky
Pro úspěšné dokončení tohoto návodu je nezbytná znalost základů JavaScriptu, včetně práce s přísliby (Promises) a syntaxí ES6. Dále je potřeba mít nainstalovaný NodeJS a textový editor dle vašeho výběru (např. Visual Studio Code).
Zásadní je také účet na etechblog.cz. Během vytváření požadavků budete potřebovat API klíč. Získáte jej po registraci na vstupní stránce API.
Po úspěšné registraci budete přesměrováni do dashboardu, kde se váš API klíč nachází.
Příprava projektu
Začněte vytvořením nové složky pro projekt. Otevřete ji v terminálu a spusťte následující příkaz:
npm init -y
Tento příkaz inicializuje projekt a vytvoří soubor package.json
.
Dále doinstalujeme potřebné balíčky pomocí příkazu:
npm install dotenv axios node-fetch
Po dokončení instalace vytvoříme tři skripty: vanilla.js
, with-axios.js
a with-fetch.js
. Dále vytvoříme soubor .env
pro uložení konfiguračních proměnných.
Struktura vašeho projektu by měla vypadat následovně:
Nyní upravíme soubor .env
a uložíme do něj váš API klíč od etechblog.cz:
API_KEY=<vas_api_klic>
Nezapomeňte nahradit <vas_api_klic>
vaším skutečným API klíčem.
Využití Vanilla.js
Modul http
a https
, které jsou součástí NodeJS, nám umožňují vytvářet klientské požadavky. V této sekci si ukážeme, jak toho využít. Otevřete soubor vanilla.js
a přidejte na začátek následující importy:
import { request } from "https"; import { config } from "dotenv";
Následně zavoláme funkci config()
pro načtení proměnných prostředí. API klíč a jméno hostitele pak uložíme do proměnných.
config(); const apiKey = process.env.API_KEY; const host="google.com";
Funkce request
pro komunikaci s API vyžaduje definici možností. Ty zahrnují hostitele, koncový bod, HTTP metodu a hlavičky požadavku. Vytvoříme tedy objekt, který tyto možnosti bude obsahovat.
const options = { hostname: "api.etechblog.cz.com", path: "/dnsrecord", method: "POST", headers: { "Content-Type": "application/json", "x-api-key": apiKey, }, };
V této fázi by měl váš soubor vanilla.js
vypadat takto:
import { request } from "https"; import { config } from "dotenv"; config(); const apiKey = process.env.API_KEY; const host="google.com" const options = { hostname: "api.etechblog.cz.com", path: "/dnsrecord", method: "POST", headers: { "Content-Type": "application/json", "x-api-key": apiKey, }, };
Nyní můžeme volat funkci request
a předat ji náš objekt options
.
const req = request(options, response => { // Zde přidáme obsluhu odpovědi });
Funkce request
akceptuje dva argumenty: objekt options
a zpětnou funkci, která bude zpracovávat odpověď serveru. V této zpětné funkci budeme definovat události, které nastanou při obdržení dat, dokončení přenosu dat nebo při výskytu chyby.
Pro obsluhu odpovědí přidáme do zpětné funkce následující kód:
let data = ""; response.on("data", chunk => { data += chunk; }); response.on("end", () => { console.log(JSON.parse(data).data.A); }); response.on("error", error => { console.log(error); });
Proměnná data
bude obsahovat JSON odpověď serveru. Událost data
se spustí při každém příchodu části dat. Událost end
se aktivuje, když je přenos dat dokončen. Pokud se objeví jakákoli chyba, bude zachycena a zapsána do konzole.
Volání funkce request
nyní vypadá takto:
const req = request(options, response => { let data = ""; response.on("data", chunk => { data += chunk; }); response.on("end", () => { console.log(JSON.parse(data).data.A); }); response.on("error", error => { console.log(error); }); });
Nakonec musíme do těla požadavku zapsat data a ukončit ho.
req.write(JSON.stringify({ url: host, types: ["A"] })); req.end();
Kompletní soubor vanilla.js
by nyní měl vypadat takto:
import { request } from "https"; import { config } from "dotenv"; config(); const apiKey = process.env.API_KEY; const host="google.com" const options = { hostname: "api.etechblog.cz.com", path: "/dnsrecord", method: "POST", headers: { "Content-Type": "application/json", "x-api-key": apiKey, }, }; const req = request(options, response => { let data = ""; response.on("data", chunk => { data += chunk; }); response.on("end", () => { console.log(JSON.parse(data).data.A); }); response.on("error", error => { console.log(error); }); }); req.write(JSON.stringify({ url: host, types: ["A"] })); req.end();
Nyní, pokud skript spustíte v terminálu pomocí příkazu node vanilla.js
, měli byste obdržet výstup podobný tomuto:
[ { address: '172.253.122.101', ttl: 247 }, { address: '172.253.122.113', ttl: 247 }, { address: '172.253.122.100', ttl: 247 }, { address: '172.253.122.102', ttl: 247 }, { address: '172.253.122.138', ttl: 247 }, { address: '172.253.122.139', ttl: 247 } ]
Tímto jsme si ukázali první přístup. Hlavní nevýhodou použití vestavěných modulů http/s
je jejich značná detailnost. Knihovny jako node-fetch
nám umožňují dosáhnout stejného výsledku, avšak s čistším a stručnějším kódem.
Využití node-fetch
Pro demonstraci využití node-fetch
otevřete soubor with-fetch.js
a na začátek přidejte potřebné importy:
import fetch from "node-fetch"; import { config } from "dotenv";
Následně zavoláme funkci config
a uložíme API klíč a hostitele do proměnných.
config(); const apiKey = process.env.API_KEY; const host="google.com"
Nyní definujeme asynchronní funkci request()
pro volání API.
async function request() { // Tělo funkce bude zde }
V těle funkce použijeme fetch
pro odeslání požadavku.
const response = await fetch("https://api.etechblog.cz.com/dnsrecord", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": apiKey, }, body: JSON.stringify({ url: host, types: ["A"] }), });
Po volání fetch
zpracujeme odpověď a případné chyby.
if (response.ok) { const { data } = await response.json(); console.log(data.A); } else { console.log(response); }
Na konec souboru přidáme volání funkce request()
.
request();
Váš soubor with-fetch.js
by nyní měl vypadat takto:
import fetch from "node-fetch"; import { config } from "dotenv"; config(); const apiKey = process.env.API_KEY; const host = "google.com"; async function request() { const response = await fetch("https://api.etechblog.cz.com/dnsrecord", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": apiKey, }, body: JSON.stringify({ url: host, types: ["A"] }), }); if (response.ok) { const { data } = await response.json(); console.log(data.A); } else { console.log(response); } } request();
Spuštění tohoto skriptu pomocí node with-fetch.js
by mělo vyprodukovat následující výstup:
[ { address: '172.253.122.113', ttl: 134 }, { address: '172.253.122.138', ttl: 134 }, { address: '172.253.122.100', ttl: 134 }, { address: '172.253.122.139', ttl: 134 }, { address: '172.253.122.102', ttl: 134 }, { address: '172.253.122.101', ttl: 134 } ]
Využití Axios
Nakonec si ukážeme, jak využít knihovnu Axios pro přístup k API etechblog.cz. Na začátek importujeme potřebné balíčky:
import axios from "axios"; import { config } from "dotenv";
Zavoláme funkci config
a uložíme proměnné prostředí do konstant.
config(); const host = "google.com"; const key = process.env.API_KEY;
Dále si uložíme adresu URL koncového bodu a data, která budou odeslána v těle požadavku.
const url = "https://api.etechblog.cz.com/dnsrecord"; const data = { url: host, types: ["A"] };
Poslední proměnnou jsou hlavičky požadavku.
const options = { headers: { "Content-Type": "application/json", "x-api-key": key, }, };
Nyní použijeme funkci post
z knihovny axios
a předáme jí adresu URL, data a možnosti jako argumenty. Pro zpracování odpovědi použijeme .then()
.
axios.post(url, data, options).then(({ data }) => { console.log(data.data.A); });
Kompletní kód v souboru with-axios.js
by měl vypadat následovně:
import axios from "axios"; import { config } from "dotenv"; config(); const host = "google.com"; const key = process.env.API_KEY; const url = "https://api.etechblog.cz.com/dnsrecord"; const data = { url: host, types: ["A"] }; const options = { headers: { "Content-Type": "application/json", "x-api-key": key, }, }; axios.post(url, data, options).then(({ data }) => { console.log(data.data.A); });
Spuštění skriptu pomocí příkazu node with-axios.js
by mělo vygenerovat tento výstup:
[ { address: '142.251.163.138', ttl: 60 }, { address: '142.251.163.113', ttl: 60 }, { address: '142.251.163.100', ttl: 60 }, { address: '142.251.163.101', ttl: 60 }, { address: '142.251.163.102', ttl: 60 }, { address: '142.251.163.139', ttl: 60 } ]
Závěrem
V tomto článku jsme si ukázali tři různé způsoby, jak pracovat s API platformy etechblog.cz. Cílem bylo demonstrovat snadnost integrace API do JavaScriptu, a konkrétně do prostředí NodeJS.
Všechny ostatní koncové body API se dají použít podobným způsobem. Liší se pouze koncový bod a parametry, které se odesílají v těle požadavku. Dokumentaci k API najdete zde.