Како користити вдзвдз АПИ за ДНС тражење у ЈаваСцрипт-у (НодеЈС)

У овом туторијалу, показаћу како да користите вдзвдз АПИ у НодеЈС-у за проверу ДНС записа било ког домена.

Направићемо једноставну скрипту која, када се изврши, штампа ИП адресу Гоогле-овог сервера за претрагу.

Ова скрипта ће користити вдзвдз ДНС Лоокуп АПИ.

Да бисмо га изградили, користићемо три приступа, од којих први користи уграђени хттпс модул у НодеЈС-у. Други ће користити модул за преузимање чвора. Затим ће последњи користити акиос клијентску библиотеку.

Шта је вдзвдз АПИ?

вдзвдз АПИ нуди комплете РЕСТ АПИ-ја за тестирање перформанси веб локације, ДНС-а и безбедносних метрика. Можете да радите ствари као што је снимање екрана, генерисање ПДФ-ова, вршење веб-стругања, скенирање портова и још много тога.

Предуслови

Да бисте пратили овај водич, биће вам потребно разумевање ЈаваСцрипт-а, укључујући обећања и ЕС6 синтаксу. Што се тиче софтвера, требало би да имате инсталиран НодеЈС и уређивач текста као што је Висуал Студио Цоде.

Биће вам потребан вдзвдз налог да бисте добили АПИ кључ за аутентификацију приликом постављања захтева. Да бисте га добили, идите на одредишну страницу АПИ-ја и направите бесплатан налог.

Након што креирате налог, требало би да будете преусмерени на контролну таблу, где ћете пронаћи свој АПИ кључ.

Изградња пројекта

За почетак, креирајте фасциклу пројекта и отворите је помоћу терминала по вашем избору, а затим покрените наредбу испод.

npm init -y

Горња команда ће иницијализовати директоријум пројекта као НодеЈС пројекат.

Затим покрените наредбу испод, која ће инсталирати све зависности за наш пројекат

npm install dotenv axios node-fetch

Након што су зависности успешно инсталиране, креирајте три скрипте у основној фасцикли пројекта и то ванилла.јс, витх-акиос.јс, витх-фетцх.јс и .енв датотеку за чување наших променљивих окружења.

На крају, корен пројекта би требало да изгледа овако:

Затим отворите .енв датотеку и додајте свој вдзвдз АПИ кључ са следећим редом кода:

API_KEY=<api key>

Замените <АПИ кључ> својим стварним АПИ кључем.

Ванилла.јс

НодеЈС има уграђени хттп и хттпс модул који можемо користити за слање клијентских захтева. Прво ћемо користити овај приступ.

Отворите датотеку ванилла.јс и додајте следеће линије кода на врх да бисте увезли зависности пројекта.

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

Затим ћемо позвати функцију цонфиг() за учитавање променљивих окружења. Затим ћемо сачувати АПИ кључ и име хоста у променљиве.

config();

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

Када позовемо функцију захтева да покренемо ХТТП захтев у НодеЈС-у, мораћемо да обезбедимо опције за хост и крајњу тачку на које желимо да се повежемо, ХТТП метод који ћемо користити и заглавља за захтев. Дакле, следеће ћемо креирати променљиву која ће чувати ове опције.

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

До сада, код у датотеци ванилла.јс изгледа овако:

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

config();

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

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

Сада можемо да наставимо да позивамо функцију захтева која пролази у методу опција:

const req = request(options, response => {

  // we are going to add response handlers here

});

Као што видите, функција захтева узима два аргумента. Први је објекат опција који смо раније дефинисали. Друга је функција повратног позива која ће управљати одговором са сервера. Унутар функције повратног позива можемо додати слушаоце догађаја када сервер пошаље податке, заврши слање података или пошаље грешку.

  10 основних савета да добијете више од апликације Гоогле рекордер на Пикел телефонима

Да бисте додали различите руковаоце одговорима, додајте следеће линије кода унутар функције повратног позива:

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

Променљива података је једноставно стринг у који ћемо похранити серверов ЈСОН одговор док нам се шаље назад.

Да бисмо заиста ускладиштили податке, слушаћемо догађаје објекта одговора о подацима. Кад год се овај догађај покрене, додаћемо део података које сервер шаље променљивој података.

Затим да бисмо коначно користили податке, слушаћемо догађај на крају на објекту одговора. Ово ће бити позвано када сви подаци буду послати са сервера и када заврши свој одговор.

На крају, саслушаћемо грешке и пријавити их на конзолу ако се појаве.

Због тога би позив функције захтева требао изгледати овако

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

На крају, датотека би требало да изгледа овако:

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

config();

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

const options = {
  hostname: "api.techblog.co.rs.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();

Сада, ако се вратите на терминал и покренете скрипту користећи команду ноде ванилла.јс, требало би да добијете следећи излаз.

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

То је то за први део. Очигледан недостатак коришћења уграђених ХТТП/С модула је то што је опширно. Клијентске библиотеке као што је ноде-фетцх ће вам помоћи да направите исти програм, али са јаснијим и сажетијим кодом.

  8 најбољих алата за предвиђање података и предвиђања заснованих на вештачкој интелигенцији за предузећа

ноде-фетцх

Да бисте креирали исту скрипту али са ноде-фетцх, отворите датотеку витх-фетцх.јс и додајте следеће увозе на врх.

import fetch from "node-fetch";
import { config } from "dotenv";

Затим позовите функцију цонфиг да бисте конфигурисали променљиве окружења и поставили константе за АПИ_КЕИ и хост чије А записе ћемо захтевати.

config();

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

Затим ћемо дефинисати функцију за упућивање АПИ позива. Ова функција ће бити асинхрона.

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

Унутар тела функције треба да позовемо функцију преузимања коју смо раније увезли из пакета ноде-фетцх.

const response = await fetch("https://api.techblog.co.rs.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();

Ваша датотека би сада требала изгледати овако:

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.techblog.co.rs.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();

А покретање те скрипте са чвором витх-фетцх.јс требало би да произведе следећи излаз:

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

Акиос

На крају, користићемо Акиос за приступ вдзвдз АПИ-ју. За почетак, хајде да увеземо пакете дотенв и акиос.

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

Затим, позовимо функцију цонфиг за подешавање променљивих окружења. Поред тога, чувајмо име хоста и АПИ кључ у одвојеним константама.

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

Сада, хајде да сачувамо УРЛ крајње тачке АПИ-ја у другој константи

const url = "https://api.techblog.co.rs.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);
});

На крају свега овога, код у витх-акиос датотеци би требало да изгледа овако:

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

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

const url = "https://api.techblog.co.rs.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);
});

А када покренете скрипту користећи чвор са-акиос.јс, требало би да прикаже следећи излаз:

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

Завршне речи

У овом посту смо креирали скрипту са три различита приступа. Циљ овога је био да се истакне колико је лако коришћење вдзвдз АПИ-ја и како бисмо га могли користити у Јавасцрипт-у, посебно у НодеЈС-у.

  Како да хостујете децентрализовану веб локацију 2023

Истражите вдзвдз АПИ документацију за више.