🔄 Что такое API?
В предыдущей статье мы рассмотрели веб-хостинг и размещение сайтов в интернете. Теперь давайте изучим, как приложения взаимодействуют между собой.
API (Application Programming Interface) — это набор правил и протоколов, которые позволяют различным программам обмениваться данными и функциями. Простыми словами: API — это “розетка” для подключения одной программы к другой.
🌐 REST API — современный стандарт веб-взаимодействия
REST (Representational State Transfer) — это архитектурный стиль для создания веб-сервисов, предложенный Роем Филдингом в 2000 году. Это не протокол или формат, а набор принципов и ограничений.
Основные принципы REST
- Клиент-серверная архитектура — разделение ответственности
- Отсутствие состояния (Statelessness) — каждый запрос содержит всю необходимую информацию
- Кэширование — ответы могут быть помечены как кэшируемые
- Единый интерфейс — стандартный способ взаимодействия
- Многоуровневая система — между клиентом и сервером могут быть промежуточные слои
- Код по запросу (опционально) — сервер может передавать исполняемый код
📊 Ресурсы и URI
В REST API всё является ресурсом, который идентифицируется с помощью URI (Uniform Resource Identifier):
/users— коллекция пользователей/users/123— конкретный пользователь/users/123/posts— посты конкретного пользователя
Хорошие практики проектирования URI
- Используйте существительные для ресурсов
- Применяйте множественное число для коллекций
- Используйте иерархию для связанных ресурсов
- Избегайте глаголов в URI
- Используйте дефисы (-) вместо подчеркиваний (_)
Хорошо: /articles/123/comments
Плохо: /getArticleComments?article_id=123
🔄 HTTP методы в REST API
REST использует стандартные HTTP методы для операций с ресурсами:
| Метод | Операция | Описание |
|---|---|---|
| GET | Чтение | Получение ресурса или коллекции ресурсов |
| POST | Создание | Создание нового ресурса |
| PUT | Обновление | Полное обновление существующего ресурса |
| PATCH | Частичное обновление | Обновление части ресурса |
| DELETE | Удаление | Удаление ресурса |
Примеры использования методов
GET /users— получить список пользователейGET /users/123— получить информацию о пользователе с ID 123POST /users— создать нового пользователяPUT /users/123— полностью обновить данные пользователяPATCH /users/123— обновить отдельные поля пользователяDELETE /users/123— удалить пользователя
🔢 HTTP статус-коды в REST API
REST использует стандартные HTTP статус-коды для указания результата операции:
Успешные операции
200 OK— запрос выполнен успешно201 Created— ресурс успешно создан204 No Content— успешный запрос без тела ответа
Ошибки клиента
400 Bad Request— неверный запрос401 Unauthorized— необходима аутентификация403 Forbidden— доступ запрещен404 Not Found— ресурс не найден405 Method Not Allowed— метод не разрешен для данного ресурса422 Unprocessable Entity— невозможно обработать данные
Ошибки сервера
500 Internal Server Error— внутренняя ошибка сервера502 Bad Gateway— ошибка шлюза503 Service Unavailable— сервис временно недоступен
📋 Форматы данных в REST API
REST не привязан к конкретному формату данных, но наиболее распространены:
JSON (JavaScript Object Notation)
| |
XML (eXtensible Markup Language)
| |
Почему JSON популярнее?
- Более компактный формат
- Легче читается человеком
- Проще парсится в JavaScript
- Меньше избыточности
🔐 Аутентификация и авторизация в REST API
Основные способы аутентификации
- Basic Authentication — логин и пароль в заголовке Authorization
- API ключи — уникальные ключи в URL или заголовке
- OAuth 2.0 — делегирование доступа без передачи учетных данных
- JWT (JSON Web Tokens) — подписанные токены с информацией о пользователе
- OpenID Connect — надстройка над OAuth 2.0 для аутентификации
| |
👨💻 Версионирование API
Версионирование помогает вносить изменения в API без нарушения работы существующих клиентов.
Способы версионирования
- В URL:
/api/v1/users - В заголовке:
Accept: application/vnd.company.api+json;version=1 - В параметре запроса:
/api/users?version=1 - В поддомене:
v1.api.example.com/users
🔧 Документирование REST API
Хорошая документация критически важна для API:
Инструменты для документирования
- Swagger/OpenAPI — стандарт для описания RESTful API
- Postman — создание, тестирование и документирование API
- RAML — язык разметки для API
- API Blueprint — язык описания API на основе Markdown
Что должна включать документация
- Описание всех эндпоинтов
- HTTP методы
- Параметры запросов
- Форматы ответов
- Коды состояний
- Примеры запросов и ответов
- Информация об аутентификации
⚡ GraphQL — альтернатива REST
GraphQL — язык запросов API, разработанный Facebook. Основные отличия от REST:
- Клиент указывает точно, какие данные ему нужны
- Один эндпоинт для всех запросов
- Строгая типизация данных
- Минимизация избыточных данных
- Возможность объединения нескольких запросов
| |
🚀 Как тестировать API?
Инструменты для тестирования
- Postman — популярный инструмент для работы с API
- curl — консольная утилита для отправки HTTP-запросов
- Insomnia — удобный клиент REST
- Автоматизированное тестирование — Jest, Mocha, JUnit и т.д.
Пример запроса с curl
| |
🛠️ Практические рекомендации
- Используйте HTTPS для всех API
- Добавляйте валидацию входных данных
- Ограничивайте скорость запросов (Rate limiting)
- Добавляйте пагинацию для больших коллекций
- Включайте информативные сообщения об ошибках
- Используйте сжатие данных (Gzip, Brotli)
- Добавляйте кэширование с помощью заголовков
📚 Что дальше?
- Узнайте про CDN
- Изучите микросервисную архитектуру
- Погрузитесь в серверную разработку
