Запросы на сервер (fetch), взаимодействие с backend api, использование swagger.
В этом уроке, посмотрим на backend глазами frontend разработчика и узнаем каким образом с ним
взаимодействовать.
Для взаимодействия с API в данном уроке, мы будем использовать Swagger — инструмент для
интерактивной документации, который позволяет изучать эндпоинты, тестировать запросы и анализировать
структуру ответов. Выполним отправку запросов следующим образом:
- через интерфейс
Swagger, - с помощью консольной утилиты
curl, - посредством нативного метода
fetchв браузере, - проанализируем структуру запросов (
url,headers) и ответов (JSON). - используем уникальный API key, который необходимо будет передавать в заголовках каждого запроса для аутентификации приложения.
Основы архитектуры клиент-серверного взаимодействия. Роли frontend и backend.
- Frontend
Относится к клиентской части приложения, с которой непосредственно взаимодействует пользователь.
Основная задача которой — отправлять запросы на backend, получать данные и визуализировать их для
пользователя.
- Backend
Серверная часть приложения, которая обрабатывает запросы от frontend. Выполняет бизнес-логику,
например, взаимодействует с базой данных, формирует и отправляет ответы. Backend может быть
написан на различных языках программирования (Node.js, Python, Go, PHP и др.).
Frontend, как правило, делает запросы наbackend, получает какие-то данные и эти данные визуализирует.
Принципы клиент-серверного взаимодействия универсальны и применяются не только в веб-разработке, но и в мобильных приложениях и даже во внутренней коммуникации между серверными компонентам и.
Процесс сборки и запуска frontend приложения
- Мы имеем
Reactпроект, который, как правило, состоит из файлов (.jsx, .tsx), хранящихся на диске разработчика. - Проект мы создали с помощью такого инстумента как Vite, который используется для компиляции,
транспиляции и сборки исходных файлов в формат, понятный браузеру (
HTML,JavaScript,CSS). Это происходит, например, по командеnpm run dev. Viteзапускает локальный dev-сервер (например, на портуlocalhost:5173), который раздает статичные файлы собранного приложения.- Пользователь открывает адрес в браузере. Браузер отправляет первый запрос на локальный сервер и
получает
index.htmlфайл. - В случае с SPA - single page application, полученный нами HTML-файл обычно содержит пустой
divс идентификаторомrootи тег<script>, который инициирует второй запрос для загрузкиJavaScript-кода. - После загрузки
JavaScriptв оперативной памяти вкладки браузераReact"оживляет" страницу, отрисовывая компоненты внутриdivсid='root'. - И только после инициализации,
frontendприложение отправляет запросы на удаленныйbackendсервер для получения динамических данных.



Взаимодействие между клиентом и сервером происходит по протоколу HTTP или его защищенной версии
HTTPS.
- HTTPS: обеспечивает безопасное (шифрованное) соединение, что критически важно при передаче данных через интернет. По умолчанию использует порт 443.
- URL: уникальный адрес, состоящий из протокола (
HTTPS), домена и, опционально, порта.
API как интерфейс взаимодействия с backend.
API (Application Programming Interface) — это программный интерфейс описывающий, каким образом одна программа должна взаимодействовать с другой.
API определяет:
- Доступные адреса (
endpoints). - Форматы запросов (
request) и ответов (response). - Методы аутентификации.
- Параметры для фильтрации, сортировки и т.д.
Swagger — это популярный инструмент для создания интерактивной API-документации.
Swagger представляет собой интерактивное frontend приложение, которое не только описывает
endpoint, но и позволяет отправлять тестовые запросы к API. Как правило, документация Swagger,
генерируется автоматически на основании кодовой базы backend.
Однако, существует подход API First, при котором, сначала создается документация (спецификация), а затем
frontendиbackendразработчики пишут код, который ей соответствует.
Endpoint — представляет собой конкретный URL адрес, по которому требуется обратиться для
выполнения операции над определенным ресурсом (например, получение списка треков, создание
плейлиста). Каждый endpoint представлен в документации отдельным элементом, нажав на который можно
увидеть описание его назначения и параметры.

Взаимодействие с API Music Fun.
Регистрация и получение API-ключа:
- Необходимо зарегистрироваться или авторизоваться на платформе-провайдере API, в нашем случае это
https://apihub.it-incubator.io/. - После авторизации для аккаунта автоматически генерируется уникальный API Key.
- Если ваш
API-keyскомпрометирован (например, попал в публичныйgithubрепозиторий), необходимо сгенерировать новый.
Если вы поделитесь своим API-key, тот, с кем вы поделились, будет делать запросы с помощью вашего приложения, тем самым "съедая" ваши лимиты на запросы.
Тестирование API с использованием UI Swagger.
Поскольку интерфейс Swagger позволяет выполнять тестовые запросы. Сделаем это! Для этого нам потребуется выполнить следующие шаги:
- Выбрать интересующий вас эндпоинт (например,
GET /public/tracksдля получения списка треков). - Нажать кнопку
Try it out, чтобы активировать форму для отправки запроса. - Нажать кнопку
Execute. - Получим ошибку
429 (Too Many Requests)с сообщениемThe domain is incorrect. Check your API settings.. Потому что выполнили запрос без использованияapi-key.

Аутентификация запросов с помощью api-key
Чтобы запрос был успешным, необходимо передать api-key. В Swagger это можно сделать двумя
способами:
- Локально: Сделать это можно для конкретного запроса, нажав на икону замка в правой части и ввести ключ.
- Глобально: Ввести ключ глобально нажав кнопку
Authorizeи добавить в соответствующее поле (api-key), после чего он будет автоматически добавляться ко всем последующим запросам в текущей сессии.
Повторное выполнение запроса после авторизации вернет успешный ответ со статусом 200 OK и телом
ответа в формате JSON.

Ответ от сервера приходит в формате JSON (JavaScript Object Notation). У нашего запроса к
endpoint GET /public/tracks, структура ответа следующая:
- Объект
data.- Свойство
data, которое представляет собой массив, где каждый элемент — это объект, представляющий один трек. - Объект трека, который содержит ключевые поля:
id: уникальный идентификатор.attributes: объект с основными характеристиками.title: название трека.attachments: массив с файлами. Обычно содержит один объект.- В массиве
attachmentsлежит объект, который имеет свойствоurl, содержащее прямую ссылку на аудиофайл (MP3).
- В массиве
- Свойство
Анализ сетевых запросов в браузере при помощи инструментов разработчика
Вкладка Network в инструментах разработчика браузера позволяет отслеживать все сетевые запросы, отправляемые страницей.
-
Можно отфильтровать запросы по типу, например, Fetch/XHR, чтобы видеть только асинхронные
API-запросы. -
Кликнув на запрос, во вкладке
Headersможно изучить его детали:url,method,headers,bodyи т. д.

- Во вкладке
Responseможно увидеть "сырой" ответ сервера

- Во вкладке
Preview— отформатированное дерево JSON-объекта, которое удобно анализировать

Выполнение запросов с помощью JavaScript
Запросы к API можно отправлять напрямую используя встроенный в Javascript метод fetch, который
работает на основе Promises.
Этот код асинхронно отправляет запрос, получает ответ, преобразует его тело в формат JSON и выводит в консоль данные.
Получим название трэка:
В консоли вы должны увидеть gangsta react.
Использование терминала для запросов
Swagger предоставляет готовую curl-команду для выполнения запроса из терминала, которая включает
в себя url endpoint и headers (-H).
Accept: application/json: Сообщает серверу, что клиент ожидает ответ в форматеJSON.API-KEY: Заголовок с вашим секретным ключом.- Прямой запрос через
curlможет быть заблокирован из-за проверки домена. Чтобы обойти это, нужно добавить заголовокOrigin, имитирующий запрос с разрешенного домена:-H "Origin: http://localhost". - Для удобного просмотра JSON-ответа в терминале можно использовать конвейер (pipe
|) и утилиту-форматтер, напримерjq.
Необходимый код:
Результат выполнения 🚀

🏠 Домашнее задание
Цель задания:
Освоить основы работы с REST API, понять архитектуру клиент-сервер и научиться делать HTTP-запросы
к внешним сервисам.
API для работы
Задание 1
Регистрация и получение API ключа
- Зарегистрируйтесь в apihub (если требуется)
- Откройте Trelly API
- Получите свой API ключ.
ВАЖНО: Не передавайте этот ключ третьим лицам
Задание 2
Авторизация в Swagger
- Перейдите в swagger документацию
- Нажмите на кнопку "🔒 Authorize" в
Swagger UI - Введите свой API ключ в открывшемся модальном окне
Задание 3
Получение списка задач (тасок) через Swagger UI
- Откройте endpoint для получения всех тасок
- Сделайте запрос за получением задач. "Try it out" → "Execute"
Если в разделе responses(ответ с сервера) вы получили ответ со следующей структурой, значит вы все
сделали правильно 🚀
Задание 4
Запрос через консоль браузера
Выполните GET запрос для получения списка задач через консоль браузера:
Внимание: Замените YOUR_API_KEY на свой настоящий API ключ!
Итоговый результат 🚀

Задание 5 ⭐
⭐ Дополнительное задание со звездочкой. Проделывать по желанию.
Задание 5.1
Curl запросы
Выполните запрос через командную строку
Внимание: Замените YOUR_API_KEY на свой настоящий API ключ!
Итоговый результат 🚀

Задание 5.2
Анализ сетевых запросов
- Откройте
Developer Tools (F12) - Перейдите на вкладку
Network - Выполните запрос за тасками через
Swagger UI - Найдите этот запрос в
Network tabи изучите:
- Какие заголовки (
headers) отправляются? - Какой
URLиспользуется? - Что приходит в ответе?
Важные напоминания
⚠️ Безопасность:
- Никогда не делитесь своим API ключом
- Не публикуйте API ключи в открытых репозиториях
- Если случайно "засветили" ключ - перегенерируйте новый
⚠️ Лимиты запросов:
- Не делайте слишком много запросов подряд
- Следите за лимитами API
- При ошибках внимательно читайте сообщения об ошибках
Совет: Не расстраивайтесь, если с первого раза запросы не работают. Проверьте ключ, заголовки
и адрес — чаще всего дело именно в них. Чем больше вы будете пробовать и экспериментировать, тем
увереннее станете чувствовать себя при работе с REST API.


