Použití etechblog.cz API pro kontrolu DNS záznamů v NodeJS
V tomto návodu vám ukážeme, jak s pomocí NodeJS a etechblog.cz API zkontrolovat DNS záznamy libovolné domény. Vytvoříme jednoduchý skript, který po spuštění vypíše IP adresy serverů pro vyhledávání Google. Tento skript využije DNS Lookup API od etechblog.cz. K jeho vytvoření použijeme tři odlišné metody. První z nich využívá vestavěný modul https
v NodeJS, druhá se opírá o modul node-fetch
a třetí bude používat klientskou knihovnu axios
.
Co je etechblog.cz API?
etechblog.cz API poskytuje sadu REST API pro testování výkonu webových stránek, DNS a metrik zabezpečení. Umožňuje provádět různé akce, jako je vytváření snímků obrazovky, generování PDF souborů, skenování webů a portů a mnoho dalších.
Předpoklady
Pro absolvování tohoto tutoriálu je nutná základní znalost JavaScriptu, včetně práce se sliby a syntaxí ES6. Z hlediska softwaru byste měli mít nainstalovaný NodeJS a textový editor, jako je Visual Studio Code.
Pro ověření při zadávání požadavků budete potřebovat účet na etechblog.cz a API klíč. Získáte jej na vstupní stránce API, kde si vytvoříte bezplatný účet.
Po registraci budete přesměrováni na palubní desku, kde najdete svůj API klíč.
Konstrukce projektu
Začněte vytvořením složky projektu, otevřete ji v terminálu a spusťte příkaz:
npm init -y
Tím se inicializuje adresář projektu jako projekt NodeJS.
Dále spusťte příkaz, který nainstaluje potřebné závislosti:
npm install dotenv axios node-fetch
Po úspěšné instalaci vytvořte v kořenovém adresáři projektu tři skripty: vanilla.js
, with-axios.js
a with-fetch.js
. Vytvořte i soubor .env
pro uložení proměnných prostředí.
Struktura projektu by měla vypadat takto:
Otevřete soubor .env
a přidejte svůj API klíč etechblog.cz:
API_KEY=<api key>
Nahraďte <api key>
svým skutečným API klíčem.
Vanilla.js
NodeJS má vestavěné moduly http
a https
, které můžeme použít pro vytváření HTTP požadavků. Tuto metodu použijeme jako první.
Otevřete soubor vanilla.js
a na začátek přidejte následující kód pro import závislostí:
import { request } from "https"; import { config } from "dotenv";
Dále zavoláme funkci config()
pro načtení proměnných prostředí. Následně uložíme API klíč a název hostitele do proměnných:
config(); const apiKey = process.env.API_KEY; const host="google.com";
Při volání funkce request
pro spuštění HTTP požadavku v NodeJS musíme definovat možnosti pro hostitele a koncový bod, metodu HTTP a hlavičky požadavku. Vytvoříme proměnnou, která bude tyto možnosti obsahovat:
const options = { hostname: "api.etechblog.cz.com", path: "/dnsrecord", method: "POST", headers: { "Content-Type": "application/json", "x-api-key": apiKey, }, };
Zatím by kód v souboru vanilla.js
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, }, };
Nyní můžeme přistoupit k volání funkce request
s předáním parametru options
:
const req = request(options, response => { // sem přidáme obsluhu odpovědí });
Funkce request
akceptuje dva argumenty. První je objekt options
, který jsme definovali. Druhý je funkce zpětného volání, která zpracovává odpověď ze serveru. V této funkci zpětného volání můžeme přidat posluchače událostí pro situace, kdy server odešle data, dokončí odesílání dat nebo se objeví chyba.
Přidejte následující kód do funkce zpětného volání pro přidání různých obsluh odpově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
je řetězec, do kterého budeme ukládat JSON odpověď ze serveru během streamování. Pro uložení dat posloucháme událost data
na objektu odpovědi. Kdykoli dojde k této události, přidáme část dat odeslaných serverem do proměnné data
. Pro zpracování dat budeme poslouchat událost end
na objektu odpovědi. Tato událost bude volána, když všechna data budou odeslána ze serveru. Nakonec nasloucháme případným chybám a vypisujeme je do konzole.
Volání funkce request
by mělo vypadat 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 požadavek ukončit:
req.write(JSON.stringify({ url: host, types: ["A"] })); req.end();
Finální podoba souboru je následující:
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();
Po spuštění skriptu v terminálu pomocí příkazu node vanilla.js
, byste měli obdržet následující výstup:
[ { 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 } ]
To je vše pro první část. Zjevnou nevýhodou používání vestavěných modulů HTTP/S je jeho podrobnost. Klientské knihovny, jako je node-fetch
, vám pomohou vytvořit stejný program, ale s jasnějším a stručnějším kódem.
node-fetch
Pro vytvoření stejného skriptu pomocí node-fetch
, otevřete soubor with-fetch.js
a na začátek přidejte importy:
import fetch from "node-fetch"; import { config } from "dotenv";
Poté zavolejte funkci config
pro konfiguraci proměnných prostředí a nastavení konstant pro API_KEY
a hostitele, jehož A záznamy budeme požadovat:
config(); const apiKey = process.env.API_KEY; const host="google.com"
Dále definujeme asynchronní funkci pro volání API:
async function request() { // tělo funkce se přidá zde }
V těle funkce voláme funkci fetch
, kterou jsme importovali z balíčku node-fetch
:
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 zavolání funkce fetch
chceme zpracovat odpověď a zachytit případné chyby:
if (response.ok) { const { data } = await response.json(); console.log(data.A); } else { console.log(response); }
Na konec přidejte volání funkce request()
.
request();
Váš soubor 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 generovat 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 } ]
Axios
Nakonec použijeme Axios
pro komunikaci s etechblog.cz API. Začneme importem balíčků dotenv
a axios
:
import axios from "axios"; import { config } from "dotenv";
Následně voláme config
pro nastavení proměnných prostředí. Uložíme jméno hostitele a API klíč do samostatných konstant:
config(); const host = "google.com"; const key = process.env.API_KEY;
Nyní uložíme URL koncového bodu API do konstanty:
const url = "https://api.etechblog.cz.com/dnsrecord";
Data, která budou odeslána jako součást těla požadavku, uložíme do jiné konstanty:
const data = { url: host, types: ["A"] };
Meta možnosti, jako hlavičky, uložíme do další konstanty:
const options = { headers: { "Content-Type": "application/json", "x-api-key": key, }, };
Nakonec provedeme volání funkce post
, kterou jsme importovali a předáme url
, data
a options
jako argumenty. Použijeme then
pro zpracování odpovědi:
axios.post(url, data, options).then(({ data }) => { console.log(data.data.A); });
Finální podoba kódu v souboru with-axios
:
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í node with-axios.js
vygeneruje následující 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ěrečná slova
V tomto článku jsme vytvořili skript třemi různými přístupy. Cílem bylo ukázat, jak snadné je používat etechblog.cz API v Javascriptu, konkrétně v NodeJS.
Další informace najdete v dokumentaci rozhraní API etechblog.cz.