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

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.