Приложения редко работают в одиночку. Они постоянно обмениваются данными: мобильное приложение узнаёт погоду, онлайн-магазин общается с банком. Здесь на сцену выходят API (Application Programming Interface) – интерфейсы прикладного программирования.
Что такое API?
Представьте, что вы в ресторане. Вы не идёте на кухню готовить сами. Вы общаетесь с официантом, делаете заказ, и он приносит вам готовое блюдо. Официант здесь – это своего рода API.
В программировании API – это набор правил, по которым программы общаются друг с другом. Это как меню в ресторане: в нём перечислены все доступные "блюда" (функции и данные), которые вы можете "заказать" (вызвать или запросить) у другого приложения.
API определяет:
- Как программы общаются (формат запросов и ответов).
- Что они могут запрашивать (доступные функции, данные).
- В каком формате получат ответ.
💡 Проще говоря, API – это мост, который позволяет вашему приложению "разговаривать" с другими сервисами, не зная их внутренней кухни.
Зачем нужны API?
API – основа сложных и распределённых систем. Они позволяют:
- Интегрировать: Объединять функции разных сервисов. Например, ваше приложение может использовать API Google Maps для карт или API банка для платежей.
- Переиспользовать код: Разработчики создают модульные сервисы, которые предоставляют функции через API. Другие приложения просто используют эти функции, не изобретая велосипед.
- Разделять ответственность: Каждая часть системы занимается своей задачей, а взаимодействие идёт через чёткие интерфейсы.
- Масштабировать: Легко добавлять новые сервисы или обновлять существующие, не затрагивая другие части системы, если API остаётся стабильным.
RESTful принципы: стандарт для веб-API
Когда говорят о веб-API, чаще всего имеют в виду RESTful API. REST (Representational State Transfer) – это архитектурный стиль, а не строгий протокол. Он предлагает принципы для создания масштабируемых и легко поддерживаемых веб-сервисов.
Основные принципы RESTful API:
- Клиент-серверная архитектура: Клиент (ваше приложение) и сервер (предоставляющий API) независимы. Клиент отправляет запросы, сервер обрабатывает их и отправляет ответы.
- Отсутствие состояния (Stateless): Каждый запрос клиента к серверу содержит всю нужную информацию для обработки. Сервер не помнит предыдущие запросы клиента. Это делает систему надёжнее и масштабируемее.
Представьте, что официант в ресторане каждый раз забывает ваш предыдущий заказ. Вам приходится повторять весь заказ заново.
- Кэшируемость (Cacheable): Ответы сервера можно кэшировать. Клиенты хранят их и используют повторно, что снижает нагрузку на сервер и ускоряет работу.
- Единообразный интерфейс (Uniform Interface): Это самый важный принцип REST. Он включает:
- Идентификация ресурсов: Каждый ресурс (пользователь, товар, статья) имеет уникальный идентификатор – URL (Uniform Resource Locator).
- Манипуляция ресурсами через представления: Клиент получает "представление" ресурса (например, JSON-объект) и может изменять его, отправляя это представление обратно на сервер.
- Самоописывающие сообщения: Каждое сообщение (запрос или ответ) содержит достаточно информации, чтобы понять, как его обрабатывать.
- Гипермедиа как движок состояния приложения (HATEOAS): Сервер может включать в ответы ссылки на другие связанные ресурсы, позволяя клиенту динамически перемещаться по API.
- Многослойная система (Layered System): Между клиентом и конечным сервером могут быть промежуточные серверы (прокси, балансировщики нагрузки), которые не влияют на взаимодействие клиента и сервера.
- Код по требованию (Code-On-Demand) (необязательно): Сервер может временно расширять функциональность клиента, передавая ему исполняемый код (например, JavaScript).
HTTP-методы в RESTful API
RESTful API активно используют стандартные HTTP-методы для операций над ресурсами. Это как глаголы, описывающие действие:
GET: Получить ресурс или список ресурсов. Например,GET /users– получить всех пользователей,GET /GET /users/123– получить пользователя с ID 123.POST: Создать новый ресурс. Например,POST /usersс данными нового пользователя в теле запроса.PUT: Полностью обновить существующий ресурс. Например,PUT /users/123с новыми данными для пользователя 123.PATCH: Частично обновить существующий ресурс. Например,PATCH /users/123для изменения только одного поля пользователя.DELETE: Удалить ресурс. Например,DELETE /users/123.
Статусы HTTP-ответов
Сервер всегда отправляет ответ, который включает HTTP-статус-код. Эти коды сообщают клиенту о результате запроса:
2xx(Успех):200 OK: Запрос успешно обработан.201 Created: Ресурс успешно создан (обычно послеPOST).204 No Content: Запрос успешно обработан, но нет содержимого для возврата (обычно послеDELETE).
4xx(Ошибка клиента):400 Bad Request: Некорректный запрос (например, неверный формат данных).401 Unauthorized: Требуется аутентификация.403 Forbidden: Доступ запрещён.404 Not Found: Ресурс не найден.
5xx(Ошибка сервера):500 Internal Server Error: Внутренняя ошибка сервера.
Пример RESTful API
Представьте API для управления списком книг:
| Действие | HTTP-метод | URL-путь | Описание |
|---|---|---|---|
| Получить все книги | GET | /books | Возвращает список всех книг. |
| Получить книгу по ID | GET | /books/123 | Возвращает книгу с ID 123. |
| Добавить новую книгу | POST | /books | Создаёт новую книгу (данные в теле запроса). |
| Обновить книгу по ID | PUT | /books/123 | Полностью обновляет книгу с ID 123. |
| Удалить книгу по ID | DELETE | /books/123 | Удаляет книгу с ID 123. |
Теперь вы понимаете, что такое API и как работают RESTful принципы. Вы готовы к следующему шагу: научиться отправлять HTTP-запросы с помощью Python, чтобы взаимодействовать с этими API. В следующем разделе мы рассмотрим, как это сделать с помощью популярной библиотеки requests.