Современный веб-мир невозможно представить без JavaScript. За годы своего развития JavaScript прошел путь от небольшого дополнения до языка. Сегодня, в эпоху глобального погружения в веб-среду, JavaScript успешно помогает разработчикам как фронтенда, так и бэкенда.
Функциональность приложения, которое будет рассматриваться далее, в основном связана со взаимодействием с различными API через библиотеки с открытым исходным кодом. При работе с JavaScript чрезвычайно важно знать, как посылать HTTP-запросы и получать динамические данные с сервера/базы данных.
Что вам понадобится
- Инструкция по установке Node.js и созданию локальной среды установки.
- Базовое понимание написания кода на JavaScript.
- Понимание обратных вызовов, промисов и Async/Await.
- Знание HTML и CSS.
Что такое API?
API — это аббревиатура, образованная от словосочетания Application Programming Interface (интерфейс прикладного программирования). Это посредник, осуществляющий передачу данных запроса/ответа между клиентом и сервером.
В качестве примера из реальной жизни рассмотрим процесс заказа такси через Uber из Дели в Гургаон. Сначала заходим в приложение и вводим место отправления и пункт назначения. В это время сервис Google Maps API получает данные о расстоянии между двумя городами, а API Uber связывает API-данные Google Maps со своим API. В итоге получаем актуальную информацию о расстоянии до пункта назначения и количестве доступных водителей такси.
REST API — что это? Создаем API с нуля на Express
В примере выше Google Maps использует API Uber для запроса информации, отправляя функцию HTTP-запроса, содержащего начальный и конечный пункт поездки.
Теперь посмотрим, как вызвать API в JavaScript с помощью нескольких библиотек с открытым исходным кодом. Три основных метода вызова API:
XMLHttpRequest
XMLHttpRequest — это объект браузера, который позволяет делать HTTP-запросы на JavaScript. В настоящее время все современные веб-браузеры имеют встроенный объект XMLHttpRequest для запроса данных с сервера.
XMLHttpRequest производит две операции: синхронную и асинхронную.
Асинхронная операция:
Синхронная операция:
Если в методе open третий параметр async установлен в false , то запрос выполняется синхронно.
Fetch
JS-метод fetch() используется для запроса к серверу и загрузки данных на веб-страницах. Fetch API — такой же простой, интуитивно понятный интерфейс, как и XMLHttpRequest, применяемый для асинхронного использования ресурсов.
Основное отличие заключается в том, что в настоящее время Fetch работает с промисами, а не с обратными вызовами. Разработчики JavaScript стали отказываться от обратных вызовов после появления промисов.
Fetch API очень просто использовать. Нужно просто передать URL, путь к нужному ресурсу, методу fetch() :
В качестве параметра в fetch() передается маршрут к необходимому ресурсу. Он возвращает промис, который при выполнении передает ответ в then() . Метод catch() перехватывает ошибки, если запрос не удается завершить из-за сбоя в сети или по какой-либо другой причине.
Что такое API простыми словами
Axios
Axios — это библиотека с открытым исходным кодом, которая помогает выполнять HTTP-запросы. Она предоставляет методы .get() , .post() и .delete() .
Установка Axios
Установить Axios можно с помощью:
> или через сеть доставки контента:
Теперь можно отправлять HTTP-запросы, включив следующий скрипт в HTML и .js файл.
Базовый API Axios
Рост популярности Axios среди разработчиков привел к появлению богатого выбора сторонних библиотек.
- Изучаем функции высшего порядка в JavaScript
- Прототипирование с веб-компонентами: создание RSS Reader
- Почему Lodash по-прежнему полезен?
Источник: medium.com
JavaScript: Что такое API и как с ним работать
Рассмотрим что такое API и зачем он нужен на примере небольшого магазина. По шагам напишем сценарий получающий данные из реального API и обрабатывающий их.
Что такое API
Представьте, что вы владелец небольшого продуктового магазина. Вы ведёте учёт своих запасов с помощью ручки и бумаги, но заметили, что управлять им становиться всё труднее. У вас часто заканчиваются популярные товары, и вам приходится отказывать покупателям, или в итоге вы получаете слишком много определённых товаров, которые не продаются быстро. Вы знаете, что существуют программные решения, которые могут помочь лучше справляться с запасами, но вы не знаете с чего начать.
Однажды вы болтаете с другом, который работает в индустрии программного обеспечения. Он предлагает изучить использование API для подключения вашей системы управления запасами к программному решению, которое может помочь автоматизировать отслеживание запасов. Сначала вы не знаете, что такое API и как оно может вам помочь. Но, когда ваш друг объясняет, вы начинаете видеть потенциал.
Application Programming Interface или Интерфейс Прикладного Программирования — способ взаимодействия двух программных приложений друг с другом. API-интерфейсы позволяют вам получать доступ к данным или функциям из другого приложения и использовать их в своём приложении. В данном случае вы можете использовать API для подключения системы управления запасами к программному решению, которое поможет более эффективно отслеживать запасы.
Ваш друг предлагает изучить популярное программное обеспечение для управления запасами, которое предлагает API. Проведя некоторое исследование, вы обнаруживаете, что программное обеспечение предлагает API, который позволяет получать данные о запасах, добавлять новые товары и обновлять существующие. Вы решаете внедрить API в свою систему управления запасами.
Используя API, вы можете автоматизировать многие задачи, которые раньше требовали ручного ввода. Вы можете быстро увидеть, какие товары заканчиваются, и заказать больше, прежде чем они закончатся. И вы можете отслеживать популярность различных товаров, чтобы принимать более обоснованные решения о покупке. В целом, использование API помогло сэкономить время и деньги, а также упростило ведение малого бизнеса.
Итак, это краткий рассказ об API и о том, как его можно использовать в реальных сценариях. В данном случае API позволил владельцу небольшого продуктового магазина соединить свою систему управления запасами с программным решением, которое помогло бы им более эффективно отслеживать свои запасы. Используя API, они смогли автоматизировать многие задачи, ранее требовавшие ручного ввода, и в процессе сэкономить время и деньги.
С чего начать
Шаг 1: Выбор API
Прежде чем начать работать с API, необходимо выбрать тот, который предоставляет нужные вам данные. Существует множество доступных API, обеспечивающих доступ к широкому спектру данных, включая данные о погоде, курсы акций, новостные статьи и многое другое. Некоторые популярные API включают в себя:
- Twitter API
- Google Maps API
- OpenWeatherMap API
- GitHub API
- Spotify API
У каждого API есть своя документация, в которой объясняется, как делать запросы и получать ответы. Вам необходимо прочитать эту документацию, чтобы понять, как работать с API.
Шаг 2: Понимание API
Следующий шаг — понять, как использовать API. Документация по API должна объяснять, как делать запросы, какие параметры включать в запросы и как будут выглядеть ответы. Вам нужно знать URL-адрес конечной точки API, метод HTTP ( GET , POST , PUT , DELETE ) для использования и все необходимые параметры и заголовки.
Например, предположим, что вы хотите использовать OpenWeatherMap API для получения текущей погоды в определённом городе. В документации по API указано, что вам необходимо сделать GET запрос на следующий URL: https://api.openweathermap.org/data/2.5/weather?q=appid=YOUR_API_KEY’)
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error))
Этот код отправляет GET запрос к OpenWeatherMap API для получения текущей погоды в городе Лондон, использую ваш ключ API. Метод then объекта Promise используется для обработки ответа. Первый метод then вызывает response.json() для анализа ответа как JSON, а второй then выводит данные ответа в консоль. Метод catch используется для обработки любых ошибок возникающих во время запроса.
Шаг 4: Обрабатываем ответ
Когда у вас есть данные ответа, нужно извлечь из них соответствующую информацию. В случае с OpenWeatherMap API ответ будет содержать много информации о текущей погоде, включая температуру, влажность, скорость ветра и многое другое. Вам нужно будет проанализировать данные JSON и извлечь нужную информацию.
fetch(‘https://api.openweathermap.org/data/2.5/weather?q=London response.json())
.then(data =>
const temperature = data.main.temp;
const humidity = data.main.humidity;
const windSpeed = data.wind.speed;
console.log(`Temperature: $temperature>, Humidity: $humidity>, Wind Speed: $windSpeed>`);
>)
.catch(error => console.error(error))
Этот код анализирует данные ответа как JASON и извлекает температуру, влажность и скорость ветра из объектов mine и wind в ответе. Затем выводит эту информацию в консоль.
Шаг 5: Выводим результаты в пользовательский интерфейс
Наконец, когда у вас есть соответствующая информация из ответа API, вы можете использовать её для обновления пользовательского интерфейса вашего приложения или выполнения других задач. Например, вы можете использовать данные о погоде для отображения текущей температуры и погодных условий для местоположения пользователя в вашем приложении.
fetch(`https://api.openweathermap.org/data/2.5/weather?q=$city>`)
.then(response => response.json())
.then(data =>
const temperature = data.main.temp;
const weatherDescription = data.weather[0].description;
const iconCode = data.weather[0].icon;
const weatherIconUrl = `http://openweathermap.org/img/w/$iconCode>.png`;
// update UI
const temperatureElement = document.getElementById(‘temperature’);
temperatureElement.innerText = `$temperature>°C`;
const weatherDescriptionElement = document.getElementById(‘weather-description’);
weatherDescriptionElement.innerText = weatherDescription;
const weatherIconElement = document.getElementById(‘weather-icon’);
weatherIconElement.setAttribute(‘src’, weatherIconUrl);
>)
.catch(error => console.error(error))
В этом коде мы используем OpenWeatherMap API для получения данных о погоде для определённого города, а затем извлекаем температуру, описание погоды и иконку погоды из ответа API. Затем мы обновляем пользовательский интерфейс нашего приложения с этой информацией, устанавливая внутренний текст температуры и элементов описания погоды, и устанавливая атрибутом источника иконки погоды URL-адрес иконки погоды.
Это всего лишь один пример того, как вы можете использовать данные API в своём приложении. В зависимости от API и вашего приложения вы можете использовать данные по-разному. Ключевым моментом является понимание структуры ответа API и извлечение соответствующей информации, а затем использование этой информации для обновления пользовательского интерфейса вашего приложения или выполнения других задач.
Здорово, что вы дочитали до конца!! Надеюсь вам понравилось.
Дополнительные материалы
- Объяснение JSON простым языком
- JavaScript: Что такое Промисы / Promise
- JavaScript: Управление потоком
- JavaScript: Введение в Fetch API
- JavaScript: Полное руководство по обработке ошибок
Источник: www.dev-notes.ru
Что такое API
Как разговаривать с инопланетянами? А с программой, написанной на другом языке? Просто добавь API.
Время чтения: 11 мин
Открыть/закрыть навигацию по статье
Контрибьюторы:
Обновлено 17 мая 2022
Кратко
Разные программы могут быть написаны на разных языках.
Это очевидно, и на первый взгляд кажется, что не вызывает никаких проблем. На деле же, если программы написаны на разных языках, их может быть трудно «подружить» и сделать так, чтобы они могли друг с другом «общаться».
Именно для того, чтобы подружить разные модули, системы, языки, программы — и существуют API.
Давайте сразу рассмотрим пример: мы работаем в «Twitter» и делаем фичу для браузерного приложения на JavaScript.
Когда нам нужны какие-то данные, мы запрашиваем их у сервера. Однако сервер написан, скорее всего, не на JavaScript, а на каком-то другом языке: Python, C#, Java. Чтобы сервер понял, что мы от него хотим, нам нужно как-то объяснить наш запрос.
Именно для этого нужно API — оно позволяет разным системам общаться, понимая друг друга.
API (Application Programming Interface) — это набор фич, которые одна программа представляет всем остальным. Она как бы говорит: «Смотрите, со мной можно говорить вот так и вот так, можете меня спросить о том-то через эту часть, а попросить что-то сделать — через эту».
В случае c клиент-серверным общением (см. Как работают веб-приложения) API может выступать как набор ссылок, по которым клиент обращается на сервер:
- POST / api / v1 . 0 / users — для создания пользователя;
- GET / api / v1 . 0 / users — для получения списка пользователей.
О том, какие бывают виды ссылок и принципы их построения, мы поговорим чуть ниже.
API может использоваться не только для общения браузера и сервера, но и в принципе для общения разных программ друг с другом.
Представьте, что вы написали модуль Credit Calculator , который считает проценты по кредитам какого-нибудь банка. Чтобы воспользоваться этим модулем в других частях программы, вы экспортируете его функции наружу. Эти функции — это API этого модуля.
Или, например, вы написали плагин для Gulp, который минифицирует HTML-код. Если вы пользовались функциями, которые Gulp предоставляет, вы пользовались Gulp API.
Или вы пишете программку для Arduino, которая автоматически включает свет, если в комнате стало темно. Работая с Arduino SDK, вы пользуетесь их API.
Идеальное API
В идеале всем хочется, чтобы общение между системами было бесшовным, мгновенным, понятным и поставляло все те данные и действия, которые требуются. Но на деле добиться этого бывает очень трудно.
Бесшовность
Всегда хочется, чтобы единожды написанную функциональность можно было использовать везде. Но у каждого проекта своя специфика, из-за чего написанная функция может не подойти.
Невозможно написать «универсальный модуль», который бы подошёл к любому проекту. Но зато возможно написать модуль, который бы был достаточно абстрактным. В таком случае, чтобы добавить его в проект, нам потребуется какое-то количество дополнительного кода, но мы сможем использовать уже написанные функции.
Дизайн API, при котором такое использование доставляет меньше всего проблем — наиболее бесшовный.
Быстродействие
Вернёмся к Twitter API. Если мы хотим создать нового пользователя, нам нужно передать на сервер данные об этом пользователе. Мы не можем сделать это с помощью JS-объекта, потому что сервер использует другой язык. Значит, нам надо «перевести» данные на какой-то промежуточный язык (чаще всего это JSON).
Та же история с получением данных с сервера. Серверу надо получить данные из базы данных, перевести их в какой-то язык, который понятен клиенту, и отправить.
Всё это требует времени. Чем меньше времени тратится на общение и выполнение нужных действий, тем лучше спроектировано API.
Понятность
Чем точнее названы функции, методы или ссылки в API, тем меньше заблуждений и ошибок будет возникать при работе с ним.
Полнота
Как правило, разработчикам хочется производить как можно меньше операций, из-за чего «перевод» может оказаться неточным: в нём может не хватать данных или, наоборот, быть слишком много.
Чем грамотнее спроектировано API (а скорее даже вся программная система), тем более полным будет ответ на каждое конкретное действие.
В идеальном API все эти проблемы решены, но идеального API не существует
Какие API бывают
В этой статье мы сосредоточимся на клиент-серверной архитектуре, потому что в веб-разработке под API чаще всего имеют в виду именно запросы к серверу.
Прочитайте статью «Как работают веб-приложения», чтобы глубже разобраться в клиент-серверной архитектуре.
REST
REST (Representational State Transfer) — стиль общения компонентов, при котором все необходимые данные указываются в параметрах запроса.
REST сейчас — один из самых распространённых стилей API в интернете.
Отличительная особенность этого стиля — это стиль построения адресов и выбор метода. Всё взаимодействие между клиентом и сервером сводится к 4 операциям (CRUD):
- созданию чего-либо, например, объекта пользователя (create, C);
- чтению (read, R);
- обновлению (update, U);
- удалению (delete, D).
Для каждой из операций есть собственный HTTP-метод:
- POST для создания;
- GET для чтения;
- PUT , PATCH для обновления;
- DELETE для удаления.
Разница между PUT и PATCH в том, что PUT обновляет объект целиком, а PATCH — только указанное поле.
Адрес, как правило, остаётся почти одинаковым, а детали запроса указываются в HTTP-методе и параметрах или теле запроса.
Например
Если бы мы писали API для интернет-магазина, то CRUD для заказа мог бы выглядеть следующим образом:
- POST / api / orders / — создать новый заказ. Как правило, в ответ на POST-запрос сервер возвращает ID созданной сущности, в нашем случае — ID заказа. Пусть будет 42.
- GET / api / orders / 42 — получить заказ с номером 42. В ответ мы получим JSON, XML, HTML с данными о заказе (сейчас чаще всего — JSON).
- PUT / api / orders / 42 — обновить заказ с номером 42. Вместе с запросом мы отправляем данные, которыми надо обновить этот заказ. В ответ сервер ответит или статусом 204 (всё хорошо, но контента в ответе нет), или ID обновлённой сущности.
- DELETE / api / orders / 42 — удалить заказ с номером 42. Как правило, в ответ присылается или 204, или ID удалённой сущности.
Чаще всего при работе с API веб-сервисов вам будет попадаться именно REST или что-то похожее на него.
Плюсы:
- самый распространённый стиль;
- использует фундаментальную технологию (HTTP), как основу;
- достаточно легко читается.
Минусы:
- если спроектирован плохо, может отправлять или слишком много информации, либо слишком мало. (Но для обхода этой проблемы можно использовать backend for frontend).
SOAP
Вообще, не очень корректно сравнивать SOAP и REST, потому что REST — это архитектурный стиль, а SOAP — формат обмена данными. Поэтому мы не будем их сравнивать, а просто расскажем, как работает SOAP.
SOAP (Simple Object Access Protocol) — формат обмена данными.
Это структурированный формат обмена данными, то есть каждое сообщение следует определённой структуре. Чаще всего вместе с SOAP используется XML для отражения этой структуры.
Сама структура выглядит так:
- Envelope — корневой элемент, который определяет само сообщение.
- Header содержит атрибуты сообщения, например: информацию о безопасности.
- Body содержит сообщение, которым обмениваются приложения.
- Fault необязательный элемент с ошибками обработки, если они были.
Сообщение-запрос к интернет-магазину может выглядеть так:
xmlns_xsi=»http://www.w3.org/2001/XMLSchema-instance» xmlns_xsd=»http://www.w3.org/2001/XMLSchema» xmlns_soap=»http://schemas.xmlsoap.org/soap/envelope/»> 42 soap:Envelope xmlns_xsi=»http://www.w3.org/2001/XMLSchema-instance» xmlns_xsd=»http://www.w3.org/2001/XMLSchema» xmlns_soap=»http://schemas.xmlsoap.org/soap/envelope/»> soap:Body> getOrderDetails > orderID>42orderID> getOrderDetails> soap:Body> soap:Envelope> Скопировать Скопировано Не удалось скопировать
xmlns_xsi=»http://www.w3.org/2001/XMLSchema-instance» xmlns_xsd=»http://www.w3.org/2001/XMLSchema» xmlns_soap=»http://schemas.xmlsoap.org/soap/envelope/»> 42 43 2020-10-10T12:00:00 1 23 45 soap:Envelope xmlns_xsi=»http://www.w3.org/2001/XMLSchema-instance» xmlns_xsd=»http://www.w3.org/2001/XMLSchema» xmlns_soap=»http://schemas.xmlsoap.org/soap/envelope/»> soap:Body> getOrderDetailsResponse > getOrderDetailsResult> orderID>42orderID> userID>43userID> dateTime>2020-10-10T12:00:00dateTime> products> productID>1productID> productID>23productID> productID>45productID> products> getOrderDetailsResult> getOrderDetailsResponse> soap:Body> soap:Envelope> Скопировать Скопировано Не удалось скопировать
При этом в SOAP неважно, каким методом передавать сообщения, в отличие от REST.
SOAP не очень прижился, потому что достаточно многословен и неудобен для работы на клиенте: XML проигрывает JSON, а SOAP, построенный на JSON — это довольно редкий случай.
Плюсы:
- не зависит от методов передачи;
- есть структура сообщения.
Минусы
- многословен;
- проигрывает REST в простоте.
RPC
RPC (Remote Procedure Call) — это такой стиль, при котором в сообщении запроса хранится и действие, которое надо выполнить, и данные, которые для этого действия нужны.
Так как мы больше говорим о вебе, то можно грубо сказать, что RPC — это «вызов серверной функциональности из браузера».
В вебе более часто использовались XML-RPC и JSON-RPC. Мы будем рассматривать примеры на JSON-RPC, просто потому что JSON сейчас используется чаще, и его проще читать.
Сообщение-запрос по протоколу JSON-RPC должно иметь 3 обязательных поля:
- method — строка с именем вызываемого метода.
- params — массив данных, которые должны быть переданы методу, как параметры.
- id — значение любого типа, которое используется для установки соответствия между запросом и ответом.
В ответ сервер должен прислать сообщение, содержащее:
- result — данные, которые вернул метод. Если произошла ошибка во время выполнения метода, это свойство должно быть установлено в null .
- error — код ошибки, если произошла ошибка во время выполнения метода, иначе null .
- id — то же значение, что и в запросе, к которому относится этот ответ.
На примере всё с тем же магазином, получение заказа было бы реализовано примерно так:
// Для последней спецификации следует указывать версию: «jsonrpc»: «2.0», // Далее указываем метод: «method»: «orders.get», // В параметрах указываем ID заказа, // который нас интересует: «params»: [42], // ID этого запроса. // Он может понадобиться, // когда система обрабатывает несколько запросов параллельно «id»: 1> // Для последней спецификации следует указывать версию: «jsonrpc»: «2.0», // Далее указываем метод: «method»: «orders.get», // В параметрах указываем ID заказа, // который нас интересует: «params»: [42], // ID этого запроса. // Он может понадобиться, // когда система обрабатывает несколько запросов параллельно «id»: 1 > Скопировать Скопировано Не удалось скопировать
«jsonrpc»: «2.0», // В result данные о заказе: «result»: «orderId»: 42, «userId»: 43, «dateTime»: «2020-10-10T12:00:00», «products»: [ < «productID»: 1 >, < «productID»: 23 >, ] >, «error»: null, «id»: 1> «jsonrpc»: «2.0», // В result данные о заказе: «result»: «orderId»: 42, «userId»: 43, «dateTime»: «2020-10-10T12:00:00», «products»: [ «productID»: 1 >, «productID»: 23 >, «productID»: 45 > ] >, «error»: null, «id»: 1 > Скопировать Скопировано Не удалось скопировать
Ответ с ошибкой:
«jsonrpc»: «2.0», «result»: null, «error»: «Order not found», «id»: 1> «jsonrpc»: «2.0», «result»: null, «error»: «Order not found», «id»: 1 > Скопировать Скопировано Не удалось скопировать
Плюсы:
- есть структура сообщения;
- использует JSON, что делает его проще для чтения и написания;
- производителен, если нужны batch-запросы.
Минусы:
- слишком много логики уходит на клиент;
- HTTP-кэширование недоступно.
Источник: doka.guide