Як використовувати API techukraine.net у JavaScript (NodeJS)

У цьому посібнику я збираюся продемонструвати, як використовувати techukraine.net API у NodeJS.

Щоб продемонструвати це, ми створимо простий сценарій, який під час виконання друкує IP-адресу пошукового сервера Google. Цей сценарій використовуватиме кінцеву точку запису DNS API techukraine.net.

Щоб створити його, ми будемо використовувати три підходи, перший використовує вбудований модуль https у NodeJS. Другий використовуватиме модуль node-fetch. Тоді останній використовуватиме клієнтську бібліотеку axios.

Що таке techukraine.net API?

techukraine.net – це веб-сайт, який надає інструменти, API та ресурси для створення, керування та розвитку онлайн-бізнесу. До складу цих інструментів входить API, який можна використовувати для керування продуктивністю веб-сайту, безпекою та аудитом для виявлення проблем сайту. API має щедрий безкоштовний рівень, яким ви можете скористатися.

передумови

Щоб дотримуватися цього підручника, вам знадобиться розуміння JavaScript, включаючи обіцянки та синтаксис ES6. Що стосується програмного забезпечення, у вас повинен бути встановлений NodeJS і текстовий редактор, наприклад Visual Studio Code.

Вам знадобиться обліковий запис techukraine.net, щоб отримати ключ API для автентифікації під час виконання запитів. Щоб отримати його, перейдіть на цільову сторінку API та створіть безкоштовний обліковий запис.

Після створення облікового запису вас буде перенаправлено на інформаційну панель, де ви знайдете свій ключ API.

Побудова проекту

Для початку створіть папку проекту та відкрийте її за допомогою терміналу за вашим вибором, а потім виконайте наведену нижче команду.

npm init -y

Наведена вище команда ініціалізує каталог проекту як проект NodeJS.

Далі виконайте наведену нижче команду, яка встановить усі залежності для нашого проекту

npm install dotenv axios node-fetch

Після успішного встановлення залежностей створіть три сценарії в кореневій папці проекту, а саме vanilla.js, with-axios.js, with-fetch.js і файл .env для зберігання наших змінних середовища.

Зрештою корінь проекту має виглядати так:

Далі відкрийте файл .env і додайте ключ API techukraine.net із таким рядком коду:

API_KEY=<api key>

Замініть <ключ API> на ваш справжній ключ API.

З Vanilla.js

NodeJS має вбудований модуль http і https, який ми можемо використовувати для надсилання клієнтських запитів. Ми збираємося використовувати цей підхід спочатку.

Відкрийте файл vanilla.js і додайте наступні рядки коду вгорі, щоб імпортувати залежності проекту.

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

Далі ми викличемо функцію config(), щоб завантажити змінні середовища. Потім ми збираємося зберегти ключ API та ім’я хоста у змінних.

config();

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

Коли ми викликаємо функцію запиту для запуску HTTP-запиту в NodeJS, нам потрібно буде надати параметри для хоста та кінцевої точки, до яких ми хочемо підключитися, метод HTTP, який ми будемо використовувати, і заголовки для запиту. Отже, далі ми створимо змінну, яка буде зберігати ці параметри.

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

Поки що код у файлі vanilla.js виглядає так:

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

config();

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

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

Тепер ми можемо продовжити виклик функції запиту, передавши метод options:

const req = request(options, response => {

  // we are going to add response handlers here

});

Як бачите, функція запиту приймає два аргументи. Перший — об’єкт параметрів, який ми визначили раніше. Друга — функція зворотного виклику, яка оброблятиме відповідь від сервера. Усередині функції зворотного виклику ми можемо додати слухачі подій, коли сервер надсилає дані, завершує надсилання даних або надсилає помилку.

  Як об'єднати шари в Photoshop

Щоб додати різні обробники відповідей, додайте такі рядки коду всередину функції зворотного виклику:

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

Змінна data — це просто рядок, у якому ми збираємося зберігати відповідь сервера в форматі JSON, коли вона повертається до нас.

Щоб фактично зберегти дані, ми будемо слухати об’єкт відповіді на подію даних. Щоразу, коли запускається ця подія, ми збираємося додавати фрагмент даних, надісланий сервером, до змінної data.

Потім, щоб остаточно використати дані, ми збираємося прослухати подію on end на об’єкті відповіді. Це буде викликано, коли всі дані буде надіслано з сервера, і він закінчив свою відповідь.

Нарешті, ми збираємося прослуховувати помилки та реєструвати їх на консолі, якщо вони виникнуть.

Тому виклик функції запиту має виглядати так

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.techukraine.net.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();

Тепер, якщо ви повернетеся до терміналу та запустите сценарій за допомогою команди node vanilla.js, ви повинні отримати наступний результат.

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

Ось і все для першої частини. Очевидним недоліком використання вбудованих модулів HTTP/S є багатослівність. Клієнтські бібліотеки, такі як node-fetch, допоможуть вам створити ту саму програму, але з більш чітким і лаконічним кодом.

  Що робити, якщо ваш обліковий запис Uber деактивовано назавжди?

З нод-фетч

Щоб створити той самий сценарій, але з node-fetch, відкрийте файл with-fetch.js і додайте наведені нижче імпортовані файли.

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

Потім викличте функцію config, щоб налаштувати змінні середовища та встановити константи для API_KEY і хоста, чиї записи A ми будемо запитувати.

config();

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

Далі ми збираємося визначити функцію для здійснення виклику API. Ця функція буде асинхронною.

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

Усередині тіла функції нам потрібно викликати функцію fetch, яку ми імпортували раніше з пакета node-fetch.

const response = await fetch("https://api.techukraine.net.com/dnsrecord", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-api-key": apiKey,
    },
    body: JSON.stringify({ url: host, types: ["A"] }),
});

Тоді після виклику функції fetch ми хочемо проаналізувати нашу відповідь і обробити будь-які помилки, які можуть виникнути.

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.techukraine.net.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();

І запуск цього сценарію з вузлом with-fetch.js повинен створити такий результат:

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

Нарешті, ми збираємося використовувати Axios для доступу до techukraine.net API. Для початку давайте імпортуємо пакунки dotenv і axios.

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

Далі викличемо функцію config, щоб налаштувати змінні середовища. Крім того, давайте збережемо ім’я хоста та ключ API в окремих константах.

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

Тепер давайте збережемо URL-адресу кінцевої точки API в іншій константі

const url = "https://api.techukraine.net.com/dnsrecord";

Далі давайте збережемо дані, які будуть надіслані як частина тіла запиту, в іншій константі

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

Тоді останнє, що потрібно зробити перед надсиланням запиту, це також зберегти мета-параметри, такі як заголовки, в іншій константі.

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

Нарешті, давайте зробимо виклик функції post, яку ми імпортували раніше, передавши URL-адресу, дані та змінні параметрів, які ми визначили раніше як аргументи. Оскільки це поверне обіцянку, ви можете використовувати then для обробки відповіді, коли вона зрештою буде повернена.

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

Наприкінці всього цього код у файлі 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.techukraine.net.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);
});

І коли ви запускаєте сценарій за допомогою node with-axios.js, він має відобразити такий результат:

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

Заключні слова

У цій публікації ми створили той самий сценарій із трьома різними підходами. Мета цього полягала в тому, щоб підкреслити, наскільки легко використовувати techukraine.net API, і як ми можемо використовувати його в Javascript, зокрема NodeJS.

  Виправити проблеми зі звуком League of Legends

Усі інші кінцеві точки можна використовувати подібним чином; все, що змінюється, це кінцева точка та параметри, які ви повинні надіслати як частину тіла запиту. Документацію для API можна знайти тут.