Πώς να χρησιμοποιήσετε το grtechpc.org API σε JavaScript (NodeJS)

Σε αυτό το σεμινάριο, θα δείξω πώς να χρησιμοποιείτε το grtechpc.org API στο NodeJS.

Για να το αποδείξουμε αυτό, πρόκειται να δημιουργήσουμε ένα απλό σενάριο που, όταν εκτελεστεί, εκτυπώνει τη διεύθυνση IP του διακομιστή Αναζήτησης της Google. Αυτό το σενάριο θα χρησιμοποιεί το τελικό σημείο εγγραφής DNS του API του grtechpc.org.

Για να το δημιουργήσουμε, θα χρησιμοποιήσουμε τρεις προσεγγίσεις, η πρώτη χρησιμοποιεί την ενσωματωμένη ενότητα https στο NodeJS. Το δεύτερο θα χρησιμοποιήσει τη λειτουργική μονάδα node-fetch. Στη συνέχεια, το τελευταίο θα χρησιμοποιήσει τη βιβλιοθήκη πελάτη axios.

Τι είναι το grtechpc.org API;

Το grtechpc.org είναι ένας ιστότοπος που παρέχει εργαλεία, API και πόρους για τη δημιουργία, τη διαχείριση και την ανάπτυξη μιας διαδικτυακής επιχείρησης. Σε αυτά τα εργαλεία περιλαμβάνεται ένα API που μπορεί να αξιοποιηθεί για τη διαχείριση της απόδοσης, της ασφάλειας και του ελέγχου ενός ιστότοπου για ζητήματα ιστότοπου. Το API διαθέτει ένα γενναιόδωρο δωρεάν επίπεδο που μπορείτε να επωφεληθείτε.

Προαπαιτούμενα

Για να ακολουθήσετε αυτό το σεμινάριο, θα χρειαστείτε κατανόηση της JavaScript, συμπεριλαμβανομένων των υποσχέσεων και της σύνταξης ES6. Όσον αφορά το λογισμικό, θα πρέπει να έχετε εγκατεστημένο το NodeJS και ένα πρόγραμμα επεξεργασίας κειμένου όπως το Visual Studio Code.

Θα χρειαστείτε έναν λογαριασμό grtechpc.org για να λάβετε ένα κλειδί API για έλεγχο ταυτότητας κατά την υποβολή αιτημάτων. Για να αποκτήσετε ένα, κατευθυνθείτε στη σελίδα προορισμού API και δημιουργήστε έναν δωρεάν λογαριασμό.

Αφού δημιουργήσετε τον λογαριασμό, θα πρέπει να ανακατευθυνθείτε στον πίνακα ελέγχου, όπου θα βρείτε το κλειδί API σας.

Κατασκευή του έργου

Για να ξεκινήσετε, δημιουργήστε έναν φάκελο έργου και ανοίξτε τον με ένα τερματικό της επιλογής σας και, στη συνέχεια, εκτελέστε την παρακάτω εντολή.

npm init -y

Η παραπάνω εντολή θα αρχικοποιήσει τον κατάλογο του έργου ως έργο NodeJS.

Στη συνέχεια, εκτελέστε την παρακάτω εντολή, η οποία θα εγκαταστήσει όλες τις εξαρτήσεις για το έργο μας

npm install dotenv axios node-fetch

Αφού εγκατασταθούν επιτυχώς οι εξαρτήσεις, δημιουργήστε τρία σενάρια στον ριζικό φάκελο του έργου, συγκεκριμένα vanilla.js, with-axios.js, with-fetch.js και ένα αρχείο .env για να αποθηκεύσετε τις περιβαλλοντικές μας μεταβλητές.

Στο τέλος, η ρίζα του έργου θα πρέπει να μοιάζει με αυτό:

Στη συνέχεια, ανοίξτε το αρχείο .env και προσθέστε το κλειδί API grtechpc.org με την ακόλουθη γραμμή κώδικα:

API_KEY=<api key>

Αντικαταστήστε το <κλειδί API> με το πραγματικό κλειδί API.

Με Vanilla.js

Το NodeJS έχει μια ενσωματωμένη ενότητα http και https που μπορούμε να χρησιμοποιήσουμε για να κάνουμε αιτήματα πελατών. Θα χρησιμοποιήσουμε αυτή την προσέγγιση πρώτα.

  10 Καλύτερη Πλατφόρμα Φιλοξενίας Cloud για Εκκίνηση σε Μεγάλους Οργανισμούς

Ανοίξτε το αρχείο 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.grtechpc.org.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.grtechpc.org.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

});

Όπως μπορείτε να δείτε, η συνάρτηση αιτήματος περιλαμβάνει δύο ορίσματα. Το πρώτο είναι το αντικείμενο επιλογών που ορίσαμε νωρίτερα. Η δεύτερη είναι μια λειτουργία επανάκλησης που θα χειριστεί την απόκριση από τον διακομιστή. Μέσα στη λειτουργία επανάκλησης, μπορούμε να προσθέσουμε συσκευές ακρόασης συμβάντων για όταν ο διακομιστής στέλνει δεδομένα, ολοκληρώνει την αποστολή δεδομένων ή στέλνει ένα σφάλμα.

Για να προσθέσετε τους διαφορετικούς χειριστές απόκρισης, προσθέστε τις ακόλουθες γραμμές κώδικα μέσα στη συνάρτηση επανάκλησης:

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

Η μεταβλητή δεδομένων είναι απλώς μια συμβολοσειρά όπου πρόκειται να αποθηκεύσουμε την απόκριση JSON του διακομιστή καθώς μεταδίδεται σε εμάς.

Για να αποθηκεύσουμε πραγματικά τα δεδομένα, πρόκειται να ακούσουμε το συμβάν δεδομένων του αντικειμένου απόκρισης. Κάθε φορά που ενεργοποιείται αυτό το συμβάν, θα προσαρτήσουμε το κομμάτι των δεδομένων που αποστέλλονται από τον διακομιστή στη μεταβλητή δεδομένων.

Στη συνέχεια, για να χρησιμοποιήσουμε τελικά τα δεδομένα, πρόκειται να ακούσουμε το συμβάν 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.grtechpc.org.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, θα σας βοηθήσουν να δημιουργήσετε το ίδιο πρόγραμμα, αλλά με σαφέστερο και πιο συνοπτικό κώδικα.

  Πώς να καταλάβετε εάν το τηλέφωνό σας έχει πατηθεί

Με 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() {
  // The function body will go here
}

Μέσα στο σώμα της συνάρτησης, πρέπει να καλέσουμε τη συνάρτηση fetch που εισαγάγαμε νωρίτερα από το πακέτο κόμβου-fetch.

const response = await fetch("https://api.grtechpc.org.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.grtechpc.org.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 για πρόσβαση στο grtechpc.org 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.grtechpc.org.com/dnsrecord";

Στη συνέχεια, ας αποθηκεύσουμε τα δεδομένα που θα σταλούν ως μέρος του σώματος αιτήματος σε μια άλλη σταθερά

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

Στη συνέχεια, το τελευταίο πράγμα που πρέπει να κάνετε πριν στείλετε το αίτημα θα είναι να αποθηκεύσετε επίσης τις μετα-επιλογές, όπως κεφαλίδες, σε μια άλλη σταθερά.

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

Τέλος, ας κάνουμε την κλήση στη συνάρτηση ανάρτησης που εισαγάγαμε νωρίτερα, περνώντας τις μεταβλητές url, δεδομένων και επιλογών που ορίσαμε νωρίτερα ως ορίσματα. Επειδή αυτό θα επιστρέψει μια υπόσχεση, μπορείτε στη συνέχεια να το χρησιμοποιήσετε για να χειριστείτε την απάντηση όταν τελικά επιστραφεί.

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.grtechpc.org.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 }
]

Τελικές Λέξεις

Σε αυτήν την ανάρτηση, δημιουργήσαμε το ίδιο σενάριο με τρεις διαφορετικές προσεγγίσεις. Ο στόχος αυτού ήταν να τονιστεί πόσο εύκολη είναι η χρήση του grtechpc.org API και πώς θα μπορούσαμε να το χρησιμοποιήσουμε στο Javascript, ειδικά στο NodeJS.

  Πώς να καταλάβετε εάν το τηλέφωνό σας έχει πατηθεί

Όλα τα άλλα τελικά σημεία μπορούν να χρησιμοποιηθούν με παρόμοιο τρόπο. το μόνο που αλλάζει είναι το τελικό σημείο και οι παράμετροι που πρέπει να στείλετε ως μέρος του σώματος αιτήματος. Τεκμηρίωση για το API μπορείτε να βρείτε εδώ.