Содержание статьи
REST API — это технология, которая лежит в основе всего современного интернета. Каждый раз, когда вы открываете Instagram, заказываете еду через приложение или проверяете погоду на смартфоне — работает REST API.
В этой статье я объясню что такое REST API простыми словами, без сложной технической терминологии. После прочтения вы поймете, как приложения общаются между собой, и сможете начать работать с API уже сегодня.
💡 Для кого эта статья: начинающих разработчиков, тестировщиков, менеджеров продукта, и всех, кто хочет понять, как работают современные приложения.
🤔 Что такое API (Application Programming Interface)?
Начнем с самого начала. API (Application Programming Interface) — это интерфейс программирования приложений.
API простыми словами (аналогия с рестораном)
Представьте, что вы в ресторане:
- Вы (клиент) — это ваше приложение (например, мобильное приложение Instagram)
- Кухня (кухня) — это сервер с базой данных (где хранятся все фотографии, посты, профили)
- Официант — это API!
🎯 Как это работает:
1. Вы делаете заказ официанту: "Мне, пожалуйста, пиццу" (ваше приложение отправляет запрос)
2. Официант идет на кухню: передает заказ повару (API отправляет запрос на сервер)
3. Кухня готовит: повар готовит пиццу (сервер обрабатывает запрос, находит данные в базе)
4. Официант приносит: официант приносит готовую пиццу (API возвращает ответ с данными)
5. Вы получаете: вы едите пиццу (ваше приложение получает данные и показывает их вам)
API — это посредник между вашим приложением (фронтендом) и сервером с данными (бэкендом).
Зачем нужен API?
🔗 Интеграция
Приложения могут общаться друг с другом. Например, сайт магазина использует API банка для оплаты.
🔒 Безопасность
Клиент не имеет прямого доступа к базе данных. Все запросы проходят через API с проверками.
⚡ Универсальность
Один API может обслуживать веб-сайт, мобильное приложение iOS, Android, умные часы одновременно.
🌐 Что такое REST (REpresentational State Transfer)?
REST — это архитектурный стиль (набор правил), по которому строятся API.
6 принципов REST API
1. Client-Server (Клиент-Сервер)
Клиент (приложение) и сервер (где данные) разделены. Они независимы друг от друга.
Пример: Мобильное приложение Instagram (клиент) общается с серверами Instagram (сервер) через API.
2. Stateless (Без состояния)
азе.4. Uniform Interface (Унифицированный интерфейс)
REST API использует стандартные HTTP методы: GET, POST, PUT, DELETE.
Все REST API работают одинаково, что упрощает их использование.
5. Layered System (Слоистая система)
Между клиентом и сервером может быть несколько промежуточных слоев (прокси, балансировщики нагрузки, кэш).
Клиент не знает, с каким конкретно сервером он общается.
6. Code on Demand (опционально)
Сервер может передать клиенту исполняемый код (JavaScript), который клиент запустит.
Пример: Виджеты, скрипты аналитики.
🎓 REST API простыми словами
Давайте сведем все воедино. REST API — это:
Определение REST API простыми словами
REST API — это способ общения между приложениями через интернет, используя HTTP протокол (тот же, что использует ваш браузер для загрузки сайтов).
Как это выглядит:
- Ваше приложение отправляет HTTP запрос на определенный URL (адрес)
- Сервер обрабатывает запрос, достает данные из базы
- Сервер возвращает HTTP ответ с данными в формате JSON (или XML)
Реальный пример: открываем Instagram
Что происходит под капотом, когда вы открываете приложение Instagram:
Шаг 1: Запрос постов
GET https://api.instagram.com/v1/users/self/feed
Authorization: Bearer YOUR_ACCESS_TOKEN
Перевод: "Эй, Instagram API! Покажи мне ленту новостей для этого пользователя (токен авторизации подтверждает, что это я)."
Шаг 2: Ответ сервера
{
"data": [
{
"id": "123456789",
"user": {
"username": "john_doe",
"profile_picture": "https://..."
},
"images": {
Назначение:
Запросить данные у сервера. НЕ изменяет данные на сервере (только чтение).
Примеры:
GET /api/users/123
→ Получить информацию о пользователе с ID 123
GET /api/products?category=electronics&sort=price
→ Получить список электроники, отсортированный по цене
GET /api/posts/456/comments
→ Получить комментарии к посту 456
Ответ сервера (пример):
{
"id": 123,
"name": "John Doe",
"email": "john@example.com",
"created_at": "2025-01-15"
}
POST — Создать новую запись
Назначение:
Создать новую запись на сервере (новый пост, новый пользователь, новый заказ).
Пример:
POST /api/users
Content-Type: application/json
{
"name": "Jane Smith",
"email": "jane@example.com",
"password": "securepassword123"
}
Ответ сервера:
{
"id": 456,
"name": "Jane Smith",
"email": "jane@example.com",
"created_at": "2025-10-12",
"message": "User created successfully"
}
PUT — Обновить существующую запись (полностью)
Назначение:
Полностью заменить существующую запись новыми данными.
Пример:
PUT /api/users/123
Content-Type: application/json
{
"name": "John Doe Updated",
"email": "john.new@example.com",
"phone": "+1234567890"
}
Все поля пользователя 123 будут заменены на новые значения.
PATCH — Обновить частично
Назначение:
Обновить только определенные поля, не трогая остальные.
Пример:
PATCH /api/users/123
Content-Type: application/json
{
"phone": "+1234567890"
}
1);">
Это называется CRUD: Create (создать), Read (прочитать), Update (обновить), Delete (удалить).
📊 Коды ответов HTTP (Status Codes)
Когда сервер отвечает на ваш запрос, он отправляет код состояния (status code) — это число, которое говорит, что произошло.
2xx — Успех ✅
200 OK
Значение: Запрос выполнен успешно, вот данные.
Когда: GET запрос успешно вернул данные, PUT/PATCH обновили запись.
201 Created
Значение: Новая запись создана успешно.
Когда: POST запрос создал нового пользователя, новый пост, новый заказ.
204 No Content
Значение: Запрос выполнен, но нет данных для возврата.
Когда: DELETE успешно удалил запись.
4xx — Ошибка клиента ❌
400 Bad Request
ер: Вы пытаетесь удалить чужой пост.404 Not Found
Значение: Запрашиваемый ресурс не найден.
Пример: Вы запросили пользователя с ID 99999, но такого ID не существует.
5xx — Ошибка сервера 🔥
500 Internal Server Error
Значение: Что-то сломалось на сервере (баг в коде, проблема с базой данных).
Что делать: Это не ваша вина. Обычно нужно сообщить разработчикам backend.
502 Bad Gateway
Значение: Сервер получил неверный ответ от другого сервера.
503 Service Unavailable
Значение: Сервер перегружен или на техническом обслуживании.
🎓 Как запомнить коды ответов:
- 2xx — "Все хорошо!" (Success)
- 3xx — "Перенаправление" (Redirect)
- 4xx — "Вы облажались" (Client Error)
- 5xx — "Сервер облажался" (Server Error)
🌟 Реальные примеры REST API
Давайте рассмотрим, как работают REST API в реальных сервисах, которые вы используете каждый день.
Пример 1: Twitter API (X.com)
Задача: Опубликовать твит
POST https://api.twitter.com/2/tweets
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
{
"text": "Изучаю REST API! 🚀 #learning"
}
Ответ сервера:
{
"data": {
"id": "1234567890123456789",
"text": "Изучаю REST API! 🚀 #learning",
"created_at": "2025-10-12T10:30:00.000Z"
}
}
Что произошло: Ваш твит создан, получил уникальный ID, и теперь все могут его видеть.
Пример 2: GitHub API
Задача: Получить информацию о репозитории
GET https://api.github.com/repos/facebook/react
Ответ сервера (сокращенно):
{
"name": "react",
"full_name": "facebook/react",
"description": "A declarative, efficient, and flexible JavaScript library",
"stars": 218000,
"forks": 45000,
"language": "JavaScript",
"open_issues": 1234,
"created_at": "2013-05-24T16:15:54Z"
}
Эти данные используются на странице репозитория GitHub для отображения статистики.
Пример 3: OpenWeatherMap API (погода)
Задача: Узнать погоду в Москве
GET https://api.openweathermap.org/data/2.5/weather?q=Moscow&appid=YOUR_API_KEY&units=metric
Ответ:
{
"name": "Moscow",
"main": {
"temp": 5,
"feels_like": 2,
"humidity": 75
},
"weather": [
{
"main": "Clouds",
"description": "overcast clouds"
}
],
"wind": {
"speed": 4.5
}
}
Ваше приложение погоды использует эти данные для отображения: "Москва, +5°C, облачно, ветер 4.5 м/с".
Пример 4: Stripe API (платежи)
Задача: Создать платеж
POST https://api.stripe.com/v1/charges
Authorization: Bearer sk_test_YOUR_SECRET_KEY
Content-Type: application/x-www-form-urlencoded
amount=2000¤cy=usd&source=tok_visa&description=Order #1234
Ответ:
{
"id": "ch_1234567890",
"object": "charge",
"amount": 2000,
"currency": "usd",
"status": "succeeded",
"paid": true
}
Платеж на $20.00 прошел успешно. Интернет-магазин может теперь отправлять товар.
📄 Формат данных JSON
JSON (JavaScript Object Notation) — это формат, в котором REST API обменивается данными. Это как язык, на котором "говорят" приложения.
Что такое JSON?
JSON — это текстовый формат для представления структурированных данных. Он похож на JavaScript объекты.
Пример JSON:
{
"name": "John Doe",
"age": 30,
"isStudent": false,
"email": "john@example.com",
"hobbies": ["reading", "coding", "gaming"],
"address": {
"city": "New York",
"country": "USA"
}
}
Типы данных в JSON
- Строка (String):
"John Doe"— текст в двойных кавычках - Число (Number):
30или99.99— целые или дробные числа - Булевы значения (Boolean):
trueилиfalse - Null:
null— отсутствие значения - Массив (Array):
["item1", "item2", "item3"]— список значений - Объект (Object):
{"key": "value"}— вложенная структура
Почему JSON?
✅ Легко читать
Человек может легко понять структуру данных
✅ Легко парсить
Все языки программирования умеют работать с JSON
✅ Легковесный
Меньший размер данных по сравнению с XML
Работа с JSON в разных языках
JavaScript:
// Превратить JSON строку в объект
const data = JSON.parse('{"name": "John", "age": 30}');
console.log(data.name); // "John"
// Превратить объект в JSON строку
const jsonString = JSON.stringify({name: "John", age: 30});
console.log(jsonString); // '{"name":"John","age":30}'
Python:
import json
# Превратить JSON строку в словарь
data = json.loads('{"name": "John", "age": 30}')
print(data["name"]) # "John"
# Превратить словарь в JSON строку
json_string = json.dumps({"name": "John", "age": 30})
print(json_string) # '{"name": "John", "age": 30}'
🔐 Аутентификация в REST API
Большинство REST API требуют аутентификации — подтверждения, что вы имеете право делать запросы.
1. API Key (Ключ API)
Что это:
Уникальная строка, которую вы добавляете к каждому запросу.
Пример:
GET https://api.example.com/users?api_key=abc123xyz456
Или в заголовке:
GET /api/users
X-API-Key: abc123xyz456
Плюсы: Просто
Минусы: Если кто-то украдет ключ, он получит полный доступ
2. Bearer Token (JWT)
Что это:
После входа (login) сервер выдает вам токен. Вы добавляете его в заголовок Authorization.
Пример:
Шаг 1: Вход (получение токена)
POST /api/login
Content-Type: application/json
{
"email": "john@example.com",
"password": "securepass123"
}
Ответ сервера:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expiresIn": 3600
}
Шаг 2: Использование токена в запросах
GET /api/profile
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
3. OAuth 2.0
Что это:
Сложный, но самый безопасный метод. Используется крупными сервисами (Google, Facebook, GitHub).
Как это работает:
- Пользователь нажимает "Войти через Google"
- Перенаправляется на страницу Google для входа
- Google выдает временный код
- Ваше приложение обменивает код на access token
- Используете access token для запросов к API
Плюсы: Очень безопасно, пользователь не передает пароль вашему приложению
Минусы: Сложная настройка
⚠️ Важно: безопасность API ключей
- ❌ Никогда не храните API ключи в коде (не коммитьте в GitHub)
- ✅ Используйте переменные окружения (environment variables)
- ✅ Для браузерных приложений используйте backend прокси
- ✅ Регулярно ротируйте ключи
🧪 Как тестировать REST API
Тестирование REST API — критически важная часть разработки. Давайте разберем, как это делать.
Что тестировать в REST API?
1. Статус коды
- Успешные запросы возвращают 200/201
- Неверные данные → 400
- Нет авторизации → 401
- Не найдено → 404
2. Структура ответа
- JSON валидный
- Все нужные поля присутствуют
- Типы данных правильные
3. Бизнес-логика
- Данные созданы в БД
- Расчеты правильные
- Связи между сущностями корректны
4. Безопасность
- Без токена доступ запрещен
- Чужие данные недоступны
- SQL injection не работает
5. Производительность
- Время отклика меньше 500мс
- API выдерживает нагрузку
- Нет утечек памяти
6. Граничные случаи
- Пустые запросы
- Очень длинные строки
- Отрицательные числа
Пример теста API (JavaScript + Jest)
describe('User API Tests', () => {
test('GET /api/users should return list of users', async () => {
const response = await fetch('https://api.example.com/users');
const data = await response.json();
// Проверяем статус код
expect(response.status).toBe(200);
// Проверяем, что вернулся массив
expect(Array.isArray(data)).toBe(true);
// Проверяем структуру первого пользователя
expect(data[0]).toHaveProperty('id');
expect(data[0]).toHaveProperty('name');
expect(data[0]).toHaveProperty('email');
});
test('POST /api/users should create new user', async () => {
const newUser = {
name: 'Test User',
email: 'test@example.com'
};
const response = await fetch('https://api.example.com/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(newUser)
});
const data = await response.json();
// Проверяем статус
expect(response.status).toBe(201);
// Проверяем, что вернулся ID
expect(data).toHaveProperty('id');
expect(data.name).toBe('Test User');
});
test('GET /api/users/999999 should return 404', async () => {
const response = await fetch('https://api.example.com/users/999999');
expect(response.status).toBe(404);
});
});
🛠️ Инструменты для работы с REST API
1. Postman (самый популярный)
Что это:
GUI приложение для тестирования API. Позволяет отправлять запросы, сохранять коллекции, автоматизировать тесты.
Возможности:
- ✅ Отправка GET, POST, PUT, DELETE запросов
- ✅ Сохранение коллекций запросов
- ✅ Переменные окружения (dev, staging, prod)
- ✅ Автоматические тесты (JavaScript)
- ✅ Генерация документации
- ✅ Командная работа (Postman Teams)
Скачать: postman.com
2. curl (командная строка)
Что это:
Утилита командной строки для отправки HTTP запросов. Работает везде (Linux, Mac, Windows).
Примеры команд:
# GET запрос
curl https://api.example.com/users
# POST запрос с JSON
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name":"John","email":"john@example.com"}'
# С авторизацией
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.example.com/profile
# Вывести заголовки ответа
curl -i https://api.example.com/users
# Сохранить ответ в файл
curl -o response.json https://api.example.com/users
3. REST Assured (Java)
Что это:
Библиотека Java для автоматизации тестирования REST API.
Пример теста:
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
@Test
public void testGetUsers() {
given()
.baseUri("https://api.example.com")
.when()
.get("/users")
.then()
.statusCode(200)
.body("size()", greaterThan(0))
.body("[0].name", notNullValue());
}
4. Requests (Python)
Что это:
Самая популярная библиотека Python для работы с HTTP.
Пример:
import requests
# GET запрос
response = requests.get('https://api.example.com/users')
print(response.status_code) # 200
print(response.json()) # Парсит JSON автоматически
# POST запрос
new_user = {"name": "John", "email": "john@example.com"}
response = requests.post(
'https://api.example.com/users',
json=new_user,
headers={"Authorization": "Bearer YOUR_TOKEN"}
)
print(response.json())
5. Swagger / OpenAPI
Что это:
Инструмент для документирования REST API. Генерирует интерактивную документацию, где можно отправлять запросы прямо из браузера.
Пример: petstore.swagger.io
✅ Best Practices REST API
Для разработчиков API
1. Используйте правильные HTTP методы
- GET — только для чтения, без побочных эффектов
- POST — для создания
- PUT/PATCH — для обновления
- DELETE — для удаления
2. Версионируйте API
Добавьте версию в URL: /api/v1/users, /api/v2/users
Это позволит обновлять API без поломки старых клиентов.
3. Используйте правильные статус коды
- 200 — успешный GET/PUT/PATCH
- 201 — успешный POST (создание)
- 204 — успешный DELETE (нет контента)
- 400 — неверный запрос
- 401 — не авторизован
- 403 — нет прав
- 404 — не найдено
- 500 — ошибка сервера
4. Возвращайте понятные ошибки
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Email is required",
"field": "email"
}
}
Не просто "Bad Request", а конкретное объяснение.
5. Документируйте API
Используйте Swagger/OpenAPI для автоматической генерации документации.
6. Ограничивайте запросы (Rate Limiting)
Чтобы защититься от DDoS и злоупотреблений:
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1634567890
{
"error": "Rate limit exceeded. Try again in 60 seconds"
}
7. Используйте HTTPS
Всегда! HTTP без S — небезопасно, данные передаются открытым текстом.
🎓 Хотите стать экспертом в API тестировании?
💎 Профессиональные курсы по API тестированию
Эта статья дала вам основы REST API, но чтобы стать профессионалом и получить высокооплачиваемую работу, вам нужна практика и глубокие знания.
На курсах вы изучите:
- ✅ Postman: полное руководство от базы до автоматизации
- ✅ REST Assured: автоматизация API тестов на Java
- ✅ Swagger/OpenAPI: работа с документацией API
- ✅ Аутентификация: OAuth 2.0, JWT, API keys
- ✅ CI/CD: интеграция API тестов в Jenkins, GitLab
Форматы обучения:
- 🎯 Индивидуальный подход: под ваш уровень и цели
- 💻 Практические проекты: реальные кейсы для портфолио
- 📝 Сертификат о прохождении курса
- 💬 Поддержка 24/7 в Telegram
- 📚 Материалы курса остаются с вами навсегда
Начните карьеру QA Automation Engineer с уверенных знаний API!
📚 Читайте также
📖 SQL команды для тестировщика
Основы SQL с практическими примерами для QA
📖 Нагрузочное тестирование с JMeter
Полное руководство по performance testing
📖 Карьера QA в США
Как стать QA инженером в Америке
🎯 Заключение
Теперь вы знаете что такое REST API простыми словами! Вы понимаете:
- ✅ Что такое API и зачем он нужен
- ✅ Принципы REST архитектуры
- ✅ HTTP методы (GET, POST, PUT, DELETE)
- ✅ Коды ответов (200, 404, 500)
- ✅ Формат JSON и как с ним работать
- ✅ Аутентификация (API keys, JWT, OAuth)
- ✅ Как тестировать REST API
- ✅ Инструменты (Postman, curl, REST Assured)
Следующий шаг: Установите Postman и начните практиковаться! Используйте публичные API (например, JSONPlaceholder, OpenWeatherMap) для экспериментов.