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

V tomto tutoriálu ukážu, jak používat etechblog.cz API v NodeJS.

Abychom to demonstrovali, vytvoříme jednoduchý skript, který po spuštění vytiskne IP adresu vyhledávacího serveru Google. Tento skript bude používat koncový bod DNS záznamu rozhraní API etechblog.cz.

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 je web, který poskytuje nástroje, rozhraní API a zdroje pro vytváření, správu a růst online podnikání. Součástí těchto nástrojů je rozhraní API, které lze využít ke správě výkonu, zabezpečení a auditu webových stránek. API má velkorysou bezplatnou úroveň, kterou můžete využít.

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.

S 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.

  Jak používat Sparklines v Tabulkách Google

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.

  Jak odemknout vrstvy v Adobe Photoshopu

S načítáním uzlů

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 }
]

S 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 stejný scénář se 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.

  Staňte se expertem ISTQB s těmito 9 certifikacemi

Všechny ostatní koncové body lze použít podobným způsobem; vše, co se změní, je koncový bod a parametry, které musíte odeslat jako součást těla požadavku. Dokumentaci k API naleznete zde.