Jak používat etechblog.cz DNS Lookup API v JavaScriptu (NodeJS)

V tomto tutoriálu ukážu, jak používat etechblog.cz API v NodeJS ke kontrole DNS záznamů libovolné domény.

Chystáme se vytvořit jednoduchý skript, který po spuštění vytiskne IP adresu vyhledávacího serveru Google.

Tento skript bude používat etechblog.cz DNS Lookup API.

K jeho sestavení použijeme tři přístupy, první využívá vestavěný modul https v NodeJS. Druhý bude používat modul načítání uzlů. Pak poslední použije klientskou knihovnu axios.

Co je etechblog.cz API?

etechblog.cz API nabízí sady REST API pro testování výkonu webu, DNS a bezpečnostních metrik. Můžete dělat věci, jako je pořízení snímku obrazovky, generování souborů PDF, skenování webu, skenování portů a mnoho dalšího.

Předpoklady

Abyste mohli sledovat tento tutoriál, budete potřebovat porozumění JavaScriptu, včetně slibů a syntaxe ES6. Pokud jde o software, měli byste mít nainstalovaný NodeJS a textový editor, jako je Visual Studio Code.

Budete potřebovat účet etechblog.cz, abyste získali klíč API pro ověřování při zadávání požadavků. Chcete-li jej získat, přejděte na vstupní stránku API a vytvořte si bezplatný účet.

Po vytvoření účtu byste měli být přesměrováni na dashboard, kde najdete svůj API klíč.

Budování projektu

Chcete-li začít, vytvořte složku projektu a otevřete ji pomocí terminálu podle vašeho výběru a poté spusťte příkaz níže.

npm init -y

Výše uvedený příkaz inicializuje adresář projektu jako projekt NodeJS.

Dále spusťte níže uvedený příkaz, který nainstaluje všechny závislosti pro náš projekt

npm install dotenv axios node-fetch

Po úspěšné instalaci závislostí vytvořte v kořenové složce projektu tři skripty, jmenovitě vanilla.js, with-axios.js, with-fetch.js a soubor .env pro uložení našich proměnných prostředí.

Nakonec by kořen projektu měl vypadat takto:

Dále otevřete soubor .env a přidejte svůj klíč API etechblog.cz s následujícím řádkem kódu:

API_KEY=<api key>

Nahraďte svým skutečným klíčem API.

Vanilla.js

NodeJS má vestavěný modul http a https, který můžeme použít k vytváření požadavků klientů. Tento přístup použijeme jako první.

Otevřete soubor vanilla.js a přidejte následující řádky kódu na začátek, abyste importovali závislosti projektu.

import { request } from "https";
import { config } from "dotenv";

Dále zavoláme funkci config() k načtení proměnných prostředí. Poté se chystáme uložit klíč API a název hostitele do proměnných.

config();

const apiKey = process.env.API_KEY;
const host="google.com";

Když zavoláme funkci požadavku ke spuštění požadavku HTTP v NodeJS, budeme muset poskytnout možnosti pro hostitele a koncový bod, ke kterému se chceme připojit, metodu HTTP, kterou budeme používat, a záhlaví požadavku. Dále tedy vytvoříme proměnnou, která bude tyto možnosti ukládat.

const options = {
  hostname: "api.etechblog.cz.com",
  path: "/dnsrecord",
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": apiKey,
  },
};

Kód v souboru vanilla.js zatím vypadá 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 předávání v metodě options:

const req = request(options, response => {

  // we are going to add response handlers here

});

Jak vidíte, funkce request přijímá dva argumenty. První je objekt options, který jsme definovali dříve. Druhým je funkce zpětného volání, která zpracuje odpověď ze serveru. Do funkce zpětného volání můžeme přidat posluchače událostí, když server odešle data, dokončí odesílání dat nebo odešle chybu.

Chcete-li přidat různé obslužné rutiny odpovědí, přidejte do funkce zpětného volání následující řádky kódu:

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

Datová proměnná je jednoduše řetězec, kam budeme ukládat odpověď JSON serveru, když je k nám streamována zpět.

Abychom data skutečně uložili, budeme naslouchat události datové události objektu odpovědi. Kdykoli dojde k této události, připojíme část dat odeslaných serverem k proměnné data.

Abychom data konečně použili, budeme naslouchat události on end na objektu odpovědi. To bude voláno, když budou všechna data odeslána ze serveru a bude ukončena odpověď.

Nakonec budeme naslouchat chybám a zaznamenat je do konzole, pokud se vyskytnou.

Volání funkce request by tedy 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 nějaká data a požadavek ukončit.

req.write(JSON.stringify({ url: host, types: ["A"] }));
req.end();

Nakonec by soubor 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();

Pokud se nyní vrátíte do terminálu a spustíte skript pomocí příkazu node vanilla.js, měli byste získat 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 pro první díl vše. Zjevnou nevýhodou použití vestavěných modulů HTTP/S je, že je podrobný. 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

Chcete-li vytvořit stejný skript, ale s node-fetch, otevřete soubor with-fetch.js a na začátek přidejte následující 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ž záznamy A budeme požadovat.

config();

const apiKey = process.env.API_KEY;
const host="google.com"

Dále budeme definovat funkci pro volání API. Tato funkce bude asynchronní.

async function request() {
  // The function body will go here
}

V těle funkce musíme zavolat funkci načtení, kterou jsme dříve 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"] }),
});

Poté po volání funkce načtení bychom chtěli analyzovat naši odpověď a zpracovat všechny chyby, které mohou nastat.

if (response.ok) {
    const { data } = await response.json();

    console.log(data.A);
  } else {
    console.log(response);
  }

V tomto okamžiku přidejte volání funkce po jejím požadavku.

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

A spuštění tohoto skriptu s node with-fetch.js by mělo produkovat 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 přístup k etechblog.cz API. Pro začátek importujme balíčky dotenv a axios.

import axios from "axios";
import { config } from "dotenv";

Dále zavoláme funkci config pro nastavení proměnných prostředí. Kromě toho uložme jméno hostitele a klíč API v samostatných konstantách.

const host = "google.com";
const key = process.env.API_KEY;

Nyní uložme adresu URL koncového bodu API do jiné konstanty

const url = "https://api.etechblog.cz.com/dnsrecord";

Dále uložíme data, která budou odeslána jako součást těla požadavku, do jiné konstanty

const data = { url: host, types: ["A"] };

Pak poslední věcí, kterou musíte udělat před odesláním požadavku, bude uložit také meta možnosti, jako jsou hlavičky, do jiné konstanty.

const options = {
  headers: {
    "Content-Type": "application/json",
    "x-api-key": key,
  },
};

Nakonec provedeme volání funkce post, kterou jsme importovali dříve, a předáme proměnné url, data a možnosti, které jsme definovali dříve, jako argumenty. Protože to vrátí příslib, můžete pak použít ke zpracování odpovědi, když je nakonec vrácena.

axios.post(url, data, options).then(({ data }) => {
  console.log(data.data.A);
});

Na konci toho všeho by měl kód v souboru with-axios vypadat takto:

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

A když skript spustíte pomocí uzlu with-axios.js, měl by zobrazit 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 příspěvku jsme vytvořili scénář třemi různými přístupy. Cílem bylo poukázat na to, jak snadné je použití etechblog.cz API a jak bychom jej mohli použít v Javascriptu, konkrétně NodeJS.

Další informace naleznete v dokumentaci rozhraní API etechblog.cz.