1. Основы API и HTTP для React-разработчика
Основы API и HTTP для React-разработчика
Зачем React-разработчику понимать API и HTTP
Большинство React-приложений — это интерфейс к данным, которые живут где-то ещё: на сервере, в микросервисах, в облаке, в сторонних платформах. Чтобы уверенно получать, отправлять и обновлять эти данные, нужно понимать базовые принципы:
В следующих статьях курса мы будем использовать эти основы, чтобы правильно проектировать запросы, обрабатывать ошибки, управлять состоянием загрузки и выстраивать надёжную работу с сервером в React.
Что такое API
API (Application Programming Interface) — это способ, с помощью которого одна программа предоставляет другой программе доступ к своим функциям или данным.
В контексте веба чаще всего под API понимают HTTP API: набор URL-адресов (эндпоинтов), по которым можно отправлять HTTP-запросы и получать ответы.
Примеры задач, которые решает API:
Полезный справочник по HTTP на русском/английском: MDN Web Docs — HTTP
Клиент и сервер: как это выглядит в React
React-приложение в браузере — это клиент. Оно отправляет запросы к серверу, который:
!Схема обмена HTTP-запросом и ответом между React-приложением и API
HTTP простыми словами
HTTP — это протокол, по которому клиент и сервер обмениваются сообщениями.
Каждый запрос обычно состоит из:
Каждый ответ обычно содержит:
Официальный обзор: MDN — HTTP overview
URL и эндпоинты
URL часто включает несколько смысловых частей:
https://api.example.com)/users/42)? (например, ?page=2&sort=name)Пример:
https://api.example.com/users/42?details=fullЗдесь:
42details=full уточняет формат ответаМетоды HTTP (что мы просим сделать)
На практике в API чаще всего встречаются:
GET — получить данные (обычно без изменения на сервере)POST — создать ресурс или выполнить действиеPUT — заменить ресурс целикомPATCH — частично обновить ресурсDELETE — удалить ресурсВажно: у методов есть ожидаемая семантика. Например, GET в корректном API не должен изменять данные, потому что браузеры и прокси могут кэшировать GET-запросы.
Справочник: MDN — HTTP request methods
Коды статуса HTTP (как сервер сообщает результат)
Статус-код — это число, которое помогает быстро понять, что произошло.
Успешные ответы
200 OK — запрос выполнен, ответ содержит данные201 Created — ресурс создан (часто возвращают созданный объект)204 No Content — успешно, но тело ответа пустое (например, после удаления)Ошибки клиента
400 Bad Request — некорректные данные (например, не прошла валидация)401 Unauthorized — нужна аутентификация (не переданы или неверны учётные данные)403 Forbidden — доступ запрещён (вы аутентифицированы, но прав нет)404 Not Found — ресурс не найден409 Conflict — конфликт (например, попытка создать пользователя с уже занятым email)429 Too Many Requests — слишком много запросов (лимиты)Ошибки сервера
500 Internal Server Error — внутренняя ошибка503 Service Unavailable — сервис временно недоступенСправочник: MDN — HTTP response status codes
Заголовки HTTP (headers)
Заголовки — это метаданные про запрос или ответ.
Часто используемые:
Content-Type — формат тела (например, application/json)Accept — какие форматы ответа клиент готов принятьAuthorization — данные для авторизации (часто токен)Cache-Control — правила кэшированияПример: если вы отправляете JSON на сервер, обычно указывают:
Content-Type: application/jsonСправочник: MDN — HTTP headers
Тело запроса и форматы данных
JSON
Самый частый формат обмена данными в API.
Пример тела запроса (JSON):
FormData (формы и файлы)
Если нужно отправить файл (например, аватар), часто используют FormData.
Content-Type с multipart/form-data и boundaryURL-encoded
Иногда встречается формат application/x-www-form-urlencoded (например, в старых системах или OAuth-сценариях).
REST-подход на базовом уровне
REST — это распространённый стиль проектирования API, где ресурсы адресуются URL-ами.
Типичные примеры:
GET /products — список товаровGET /products/10 — товар с id 10POST /products — создать товарPATCH /products/10 — обновить часть полейDELETE /products/10 — удалитьВажно: это стиль, а не жёсткий стандарт. Реальные API могут отступать от REST.
Идемпотентность: почему это важно
Идемпотентность означает: повторение запроса даёт тот же эффект, что и один вызов.
Практический смысл для фронтенда:
GET обычно безопасенPUT и DELETE часто проектируют идемпотентнымиPOST обычно не идемпотентен (повтор может создать дубль)Это влияет на то, как вы строите логику повторных запросов в React (например, при авто-ретраях).
Ошибки и их формат
В идеале сервер возвращает ошибки в структурированном виде (часто JSON). Например:
Тогда в React можно:
code для диагностикиЕсли API не возвращает структурированные ошибки, обычно всё равно есть:
Браузерные ограничения: CORS
Если React-приложение загружено, например, с http://localhost:5173, а API находится на https://api.example.com, это разные origin. Браузер применяет политику безопасности, и запросы между origin контролируются механизмом CORS.
Ключевые моменты:
Access-Control-Allow-OriginOPTIONSСправочник: MDN — CORS
Аутентификация и авторизация: база терминов
Важно различать:
Популярные способы в веб-приложениях:
HttpOnly cookie)Authorization: Bearer <token>)React-клиент обычно:
401 (например, разлогинить или обновить токен)HTTPS
Для реальных приложений важно использовать https://:
Справочник: MDN — HTTPS
Минимальный пример запроса из браузера
Хотя в следующих статьях мы будем разбирать запросы в React более системно, полезно увидеть базовый пример с fetch.
GET запрос:
Документация: MDN — fetch()
Частые практические выводы для React
4xx/5xx).status и на формат ответа, не полагайтесь только на текст сообщения.Что дальше по курсу
Следующий шаг — научиться организовывать работу с запросами в React так, чтобы:
Эти темы мы будем разворачивать дальше, опираясь на HTTP-основы из этой статьи.