Работа с API в JavaScript
API - это просто средство для выборки или отправки данных между интерфейсами. Допустим, вы хотите создать приложение, которое предоставляет пользователю некоторые данные в реальном времени, полученные с сервера, или, возможно, даже позволяет вам изменять или добавлять данные в какую-либо другую конечную точку. Это стало возможным благодаря API или интерфейсу прикладного программирования.
Мы будем использовать простой общедоступный API, который не требует аутентификации и позволяет получать некоторые данные, запрашивая API с помощью запросов GET.
https://randomuser.me/ - это веб-сайт, который предоставляет фиктивные данные для случайных пользователей, с которыми мы можем легко работать. Мы можем получить ответ, отправив запрос на https://randomuser.me/api/. Ответ JSON, который мы получаем в следующем формате.
Javascript
{ "results" : [ { "gender" : "female" , "name" : { "title" : "Miss" , "first" : "Nina" , "last" : "Simmmons" }, "location" : { "street" : { "number" : 970, "name" : "Eason Rd" }, "city" : "Fullerton" , "state" : "Wyoming" , "country" : "United States" , "postcode" : 57089, "coordinates" : { "latitude" : "83.1807" , "longitude" : "104.7170" }, "timezone" : { "offset" : "+8:00" , "description" : "Beijing, Perth, Singapore, Hong Kong" } }, "email" : "nina.simmmons@example.com" , "login" : { "uuid" : "bd0d135f-84df-4102-aa4f-5baaa41baf5c" , "username" : "yellowfrog722" , "password" : "dawg" , "salt" : "q28gdiyN" , "md5" : "291987daea22bb91775226574925b271" , "sha1" : "a0463a26ea5c2ff4f3ad498fd01c5994926e5021" , "sha256" : "6583eb74ca08bfac50b3b29aa52c9f02ea5d9d017fef0e5a5a6fae4f5225f928" }, "dob" : { "date" : "1980-11-01T23:10:05.403Z" , "age" : 40 }, "registered" : { "date" : "2013-04-02T02:26:52.904Z" , "age" : 7 }, "phone" : "(216)-693-7015" , "cell" : "(501)-534-9413" , "id" : { "name" : "SSN" , "value" : "847-09-2973" }, "picture" : { "large" : "medium" : "thumbnail" : }, "nat" : "US" } ], "info" : { "seed" : "82a8d8d4a996ba17" , "results" : 1, "page" : 1, "version" : "1.3" } } |
Затем вам понадобится HTML-файл для внешнего интерфейса, в котором вы хотите отображать полученные данные.
Мы можем использовать либо тег «div» (на уровне блока), либо тег «span» (на строчном уровне), который будет действовать как заполнитель для информации. Используя атрибут «id», мы можем получить требуемый контейнер «div / span», в котором мы хотим разместить информацию.
HTML
< html lang = "en" > < head > < meta charset = "UTF-8" /> < meta name = "viewport" content = "width=device-width, initial-scale=1.0" /> < link id = "favicon" rel = "icon" href = "" sizes = "16x16" /> <!-- font-awesome library to make the webpage more appealing --> < link rel = "stylesheet" href = <!-- Internal CSS styling --> < style > .content { text-align: center; padding: 30px; margin: 0px auto; } .details { margin-left: auto; margin-right: auto; } img { border-radius: 5px; box-shadow: black; } table, td { border-collapse: collapse; margin-left: auto; margin-right: auto; text-align: center; padding: 10px; border: 1px solid black; } </ style > </ head > < body > < div class = "content" > < div class = "head" > < h1 id = "head" ></ h1 > </ div > < div class = "email" > < i class = "fa fa-envelope" style = "font-size: 15px; color: blue;" ></ i > < a href = "" id = "email" > </ a > </ div > < div class = "phone" > < i class = "fa fa-phone" style = "font-size: 15px; color: blue;" ></ i > < a href = "" id = "phone" > </ a > </ div > < br /> < div id = "user-img" ></ div > < br /> < div class = "details" > < table > < tr > < td >Age</ td > < td >< span id = "age" ></ span ></ td > </ tr > < tr > < td >Gender</ td > < td >< span id = "gender" ></ span ></ td > </ tr > < tr > < td >Location</ td > < td >< span id = "location" ></ span ></ td > </ tr > < tr > < td >Country</ td > < td >< span id = "country" ></ span ></ td > </ tr > </ table > </ div > </ div > </ body > </ html > |
Тег скрипта будет содержать код, который будет делать запрос API и обрабатывать ответ. Его нужно разместить в теге body или в виде отдельного файла.
Мы используем функцию async / await, которая в основном обеспечивает отображение данных даже после загрузки страницы.
Вы можете использовать метод console.log (…), чтобы проверить, получает ли пользователь правильную информацию. Результат для того же можно увидеть, открыв окно консоли в своем веб-браузере (щелкните правой кнопкой мыши -> Проверить -> Консоль или Ctrl + Shift + J в Chrome / Edge).
Javascript
<script> async function getUser() { // Making an API call (request) // and getting the response back const response = await fetch(api_url); // Parsing it to JSON format const data = await response.json(); console.log(data.results); // Retreiving data from JSON const user = data.results[0]; let { title, first, last } = user.name; let { gender, email, phone } = user; let image = user.picture.large; let image_icon = user.picture.thumbnail; let age = user.dob.age; let { city, state, country } = user.location; let fullName = title + ". " + first + " " + last; document.title = fullName; // Accessing the div container and modify/add // elements to the containers document.getElementById( "head" ).innerHTML = fullName; document.getElementById( "email" ).href = "mailto:" + email; document.getElementById( "email" ).innerHTML = email; document.getElementById( "phone" ).href = "tel:" + phone; document.getElementById( "phone" ).innerHTML = phone; // accessing the span container document.querySelector( "#age" ).textContent = age; document.querySelector( "#gender" ).textContent = gender; document.querySelector( "#location" ).textContent = city + ", " + state; document.querySelector( "#country" ).textContent = country; // Creating a new element and appending it // to previously created containers let img = document.createElement( "img" ); let img_div = document.getElementById( "user-img" ); img.src = image; img_div.append(img); const favicon = document.getElementById( "favicon" ); favicon.setAttribute( "href" , image_icon); } // Calling the function getUser(); </script> |
Окончательный код: это комбинация вышеуказанных разделов кода.
< html lang = "en" > < head > < meta charset = "UTF-8" /> < meta name = "viewport" content = "width=device-width, initial-scale=1.0" /> <!-- font-awesome library to make the webpage more appealing --> < link rel = "stylesheet" href = <!-- Internal CSS styling --> < style > .content { text-align: center; padding: 30px; margin: 0px auto; } .details { margin-left: auto; margin-right: auto; } img { border-radius: 5px; box-shadow: black; } table, td { border-collapse: collapse; margin-left: auto; margin-right: auto; text-align: center; padding: 10px; border: 1px solid black; } </ style > </ head > < body > < div class = "content" > < div class = "head" > < h1 id = "head" ></ h1 > </ div > < div class = "email" > < i class = "fa fa-envelope" style = "font-size: 15px; color: blue;" ></ i > < a href = "" id = "email" > </ a > </ div > < div class = "phone" > < i class = "fa fa-phone" style = "font-size: 15px; color: blue;" ></ i > < a href = "" id = "phone" > </ a > </ div > < br /> < div id = "user-img" ></ div > < br /> < div class = "details" > < table > < tr > < td >Age</ td > < td >< span id = "age" ></ span ></ td > </ tr > < tr > < td >Gender</ td > < td >< span id = "gender" ></ span ></ td > </ tr > < tr > < td >Location</ td > < td >< span id = "location" ></ span ></ td > </ tr > < tr > < td >Country</ td > < td >< span id = "country" ></ span ></ td > </ tr > </ table > </ div > </ div > </ body > < script > const api_url = " https://randomuser.me/api/ "; async function getUser() { // Making an API call (request) // and getting the response back const response = await fetch(api_url); // Parsing it to JSON format const data = await response.json(); console.log(data.results); // Retreiving data from JSON const user = data.results[0]; let { title, first, last } = user.name; let { gender, email, phone } = user; let image = user.picture.large; let image_icon = user.picture.thumbnail; let age = user.dob.age; let { city, state, country } = user.location; let fullName = title + ". " + first + " " + last; document.title = fullName; // Accessing the div container and modify/add
|