Використання API techukraine.net в NodeJS: детальний посібник
У цьому матеріалі ми розглянемо, як застосувати API techukraine.net у середовищі NodeJS. Ми створимо простий скрипт, який, під час запуску, відобразить IP-адреси серверів Google. Для цього ми скористаємося API techukraine.net для запитів DNS.
Ми продемонструємо три різні підходи: перший – з використанням вбудованого модуля https
у NodeJS, другий – за допомогою модуля node-fetch
, і третій – з використанням клієнтської бібліотеки axios
.
Що таке API techukraine.net?
techukraine.net – це ресурс, який пропонує різні інструменти, API та матеріали для розробки, управління та масштабування онлайн-бізнесу. Серед цих інструментів є API, який дозволяє відстежувати продуктивність вебсайту, забезпечувати його безпеку та проводити аудит для виявлення можливих проблем. API надає безкоштовний тарифний план, яким ви можете скористатися.
Вимоги
Для проходження цього посібника, вам потрібно мати базове розуміння JavaScript, включаючи роботу з Promise та синтаксис 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>
Замініть <ваш ключ 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, }, };
Тепер ми можемо викликати функцію request
, передавши їй об’єкт options
:
const req = request(options, response => { // обробники відповіді будуть додані тут });
Функція request
приймає два аргументи: об’єкт options
і функцію зворотного виклику для обробки відповіді. Всередині цієї функції ми додамо обробники подій: отримання даних, завершення передачі даних або виникнення помилки.
Для додавання обробників, скористайтесь наступним кодом:
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
буде активована, ми додамо отримані дані до змінної data
.
Коли сервер завершить надсилання даних, буде викликано обробник події end
. Після цього ми обробимо отримані дані. Також додаємо обробник помилок error
.
Оновлений виклик функції request
виглядає так:
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 } ]
Це був перший спосіб. Недоліком вбудованих модулів є їхня багатослівність. Клієнтські бібліотеки допоможуть вам створити аналогічний код, але більш лаконічним чином.
Використання Node-fetch
Для створення аналогічного сценарію з 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() { // Тіло функції буде тут }
В тілі функції використаємо функцію 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
:
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();
Запустивши сценарій командою node 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 для доступу до API techukraine.net. Імпортуйте необхідні пакети:
import axios from "axios"; import { config } from "dotenv";
Викличте функцію config
для налаштування змінних середовища. Також збережіть ім’я хоста та ключ API в окремих константах:
config(); 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-адресу, дані і параметри. Оскільки функція повертає promise, обробимо відповідь за допомогою then
:
axios.post(url, data, options).then(({ data }) => { console.log(data.data.A); });
Повний код файлу with-axios.js
:
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 } ]
Заключні слова
У цій публікації ми створили ідентичний сценарій, використовуючи три різних підходи, щоб показати легкість використання API techukraine.net в Javascript, зокрема NodeJS. Інші кінцеві точки API можна використовувати аналогічним чином, змінюючи лише URL та параметри запиту. Документацію API можна знайти тут.