Что такое API, REST, HTTP | QArtel
Ко всей базеtools
Что такое API, REST, HTTP Около 5 мин чтения
Раздел: 06 — Основы API
Уровень: Начинающий
Что такое API?
API (Application Programming Interface) — это набор правил и протоколов, позволяющий разным программам общаться между собой.
Простая аналогия: API — это официант в ресторане. Вы (клиент) делаете заказ через официанта (API), он передаёт его на кухню (сервер), а затем приносит вам результат (ответ).
Примеры API в жизни:
Мобильное приложение банка получает данные о балансе через API банка
Сайт_booking показывает курсы валют, получая их через API Центробанка
Приложение погоды запрашивает данные у сервиса погоды через его API
Архитектура «Клиент-Сервер»
API работает в модели «клиент-сервер»:
Роль Что делает Пример Клиент Отправляет запрос
Браузер, мобильное приложение, Postman
Сервер Обрабатывает запрос и возвращает ответ Backend-приложение, база данных
Схема взаимодействия Клиент Сервер
│ │
│ ─── HTTP-запрос ──────────► │
│ │ (обработка)
│ ◄── HTTP-ответ ──────────── │
│ │
Клиент и сервер могут находиться на разных машинах, в разных странах, работать на разных ОС. Их объединяет общий протокол общения — HTTP.
Что такое HTTP? HTTP (HyperText Transfer Protocol) — это протокол передачи данных, лежащий в основе всего интернета. Определяет, как клиент формирует запрос и как сервер возвращает ответ.
Структура HTTP-запроса Метод URL HTTP/версия
Заголовок-1: значение
Заголовок-2: значение
Тело запроса (опционально)
Пример реального запроса:
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOi...
{
"name": "Иван",
"email": "ivan@mail.ru"
}
Структура HTTP-ответа HTTP/версия Код-статуса Описание
Заголовок-1: значение
Тело ответа (JSON, HTML, и т.д.)
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 42,
"name": "Иван",
"email": "ivan@mail.ru"
}
Что такое REST? REST (Representational State Transfer) — это архитектурный стиль для проектирования веб-API. RESTful API — это API, построенный по принципам REST.
6 принципов REST
1. Клиент-сервер (Client-Server) Клиент и сервер разделены. Клиент отвечает за интерфейс, сервер — за данные и логику.
2. Без состояния (Stateless) Каждый запрос содержит всю необходимую информацию. Сервер не хранит состояние сессии клиента между запросами.
Плохо: «Сначала авторизуйся, потом сервер запомнит тебя»
Хорошо: «Каждый запрос содержит токен авторизации»
3. Кэширование (Cacheable) Ответы сервера могут помечаться как кэшируемые, чтобы клиент не запрашивал одни и те же данные повторно.
4. Единообразие интерфейса (Uniform Interface) Единые правила для всех endpoint-ов: одинаковые форматы URL, методы, коды ответов.
5. Слои системы (Layered System) Клиент не знает, общается ли он напрямую с сервером или через прокси, балансировщик, CDN. Это позволяет масштабировать систему.
6. Код по требованию (Code on Demand) — опционально Сервер может передать клиенту исполняемый код (например, JavaScript).
Endpoint (Конечная точка) Endpoint — это конкретный URL, к которому клиент обращается для выполнения определённого действия.
https://api.example.com/users/42
─────────────────┬────────┬─────
Домен Путь ID ресурса
Правила именования endpoint-ов Правильно Неправильно Почему GET /usersGET /getUsersМетод уже описывает действие GET /users/42GET /user?id=42ID — часть пути ресурса POST /usersPOST /createUserPOST и так означает создание DELETE /users/42GET /deleteUser/42DELETE — отдельный метод GET /users/42/ordersGET /getUserOrdersВложенность описывает связь
Форматы данных: JSON и XML
JSON (JavaScript Object Notation) Самый популярный формат обмена данными в REST API. Легко читается человеком и машиной.
{
"id": 1,
"name": "Иван Петров",
"email": "ivan@example.com",
"roles": ["admin", "user"],
"address": {
"city": "Москва",
"country": "Россия"
}
}
Легкий вес (меньше XML)
Нативная поддержка в JavaScript
Широко поддерживается всеми языками программирования
Человекочитаемый
XML (eXtensible Markup Language) Более старый формат, всё ещё используется в некоторых системах.
<?xml version="1.0" encoding="UTF-8"?>
<user>
<id>1</id>
<name>Иван Петров</name>
<email>ivan@example.com</email>
</user>
Сравнение JSON и XML Критерий JSON XML Размер Компактный Более объёмный Читаемость Высокая Средняя Поддержка Практически все API Legacy-системы, SOAP Типы данных Есть (string, number, boolean, null) Нет (всё — текст) Вложенность Объекты и массивы Элементы и атрибуты
Практический пример: полный цикл запроса Представим, что мобильное приложение хочет показать список пользователей:
Клиент формирует запрос:
GET /api/v1/users?page=1&limit=10 HTTP/1.1
Host: api.myapp.com
Authorization: Bearer abc123
Accept: application/json
Сервер обрабатывает: проверяет авторизацию, извлекает пользователей из БД
Сервер возвращает ответ:
HTTP/1.1 200 OK
Content-Type: application/json
{
"data": [
{"id": 1, "name": "Иван"},
{"id": 2, "name": "Мария"}
],
"total": 100,
"page": 1
}
Клиент отображает данные пользователю
Ключевые выводы
API — это интерфейс взаимодействия между программами
HTTP — протокол передачи данных в интернете, основа REST API
REST — архитектурный стиль с принципами: stateless, единообразный интерфейс, клиент-сервер
Endpoint — конкретный URL для обращения к ресурсу API
JSON — основной формат обмена данными; XML используется реже (SOAP, legacy)
Ссылки