Что такое API с точки зрения обывателя?
Представьте, что вы играете с машиной на дистанционном управлении. Пульт посылает сигналы машине, а та понимает, что вы от нее хотите. API (интерфейсы прикладного программирования) похожи на пульты, а API — на официантов в ресторане. Как клиент, вы просто делаете заказ из меню, а официант приносит его вам с кухни (back-end). Он действует как мост между двумя компонентами для выполнения определенной задачи.
Что такое API с технической точки зрения?
API означает интерфейс прикладного программирования, который действует как мост, позволяющий двум программным приложениям взаимодействовать. Он определяет, как одна система может запрашивать данные или услуги у другой стандартизированным способом.
Для чего существует API:
- Обмен ресурсами и услугами между приложениями, организациями и устройствами. Например: карты Google, встроенные в другие приложения.
- API помогают разработчикам интегрировать нужные функции, не изобретая велосипед. Например: API погоды в приложении доставки.
- API позволяют запускать свой продукт быстрее. Например: приложения, которые взаимодействуют с API Twitter или Meta, публикуя сообщения от вашего имени или читая твиты.
- API могут сами быть продуктами. Например: Программы как сервис (SAAS), такие как платежные API Stripe или API Twilio для обмена текстовыми сообщениями и электронной почты.
Что будет без API?
Без API это все равно что без пульта дистанционного управления автомобилем — вам пришлось бы вручную перемещать машину, что очень неудобно! В программном обеспечении без API вы бы напрямую соединили front-end с back-end. Это может сделать ваше приложение беспорядочным и сложным в обслуживании.
Как работает расчет стоимости API?
- Платите по мере использования: Как и при заказе по меню, вы платите за каждое использование.
- На основе подписки: Как в буфете, вы платите фиксированную плату за неограниченный доступ.
- Freemium: Бесплатно для базовых функций, но вы платите за премиум-блюда.
API против Back-end:
- Бэк-энд (кухня): Здесь происходит настоящая готовка (обработка).
- API (Официант): Принимает ваш запрос (заказ) и возвращает ответ (блюдо).
Категории API:
- Аппаратные API:Камера вашего телефона использует аппаратный API для передачи изображений на экран при съемке.
- Программные библиотечные API: Музыкальное приложение использует программный библиотечный API для воспроизведения аудиофайлов без создания проигрывателя с нуля.
- Веб API: Такие приложения, как Uber, Zomato, используют веб-интерфейс API для получения данных о трафике в реальном времени из интернета, что помогает в навигации.
Типы API:
- Публичные API: Как ресторан, открытый для всех.
Например: API Google Maps — любой может использовать этот API для получения данных о местоположении для своего приложения или сайта. - Приватные API: Как столовая только для сотрудников.
Например:Внутренние API банка — У банка могут быть частные API, доступные только его сотрудникам для управления внутренними транзакциями или системами. - Партнерские API: Как ресторан, открытый только для VIP-персон.
Например: Интеграция Spotify и Instagram- Spotify может предоставить партнерский API для Instagram, позволяя пользователям делиться своими плейлистами непосредственно в историях Instagram.
Пререквизиты для запроса API:
1. Базовый URL / конечная точка: Адрес API для отправки запросов.
Протокол: Здесь указывается используемый протокол связи. HTTP не является безопасным, в то время как HTTPS обеспечивает безопасное соединение.
Пример: https:// или http://.
Домен: Домен — это имя веб-сайта. Это может быть и ip-адрес.
Пример: api.example.com.
Порт (необязательно): Порт — это как дверь, которая позволяет данным входить или выходить из компьютера через Интернет.
Пример: Порт 80 (http), Порт 443 (https), Порт 25 (почта).
Базовый путь: Часть URL, которая указывает на корень API или сервиса, обычно /v1 или /api.
Пример: /v1.
Путь к конечной точке: Здесь указывается ресурс или операция, к которой вы пытаетесь получить доступ на сервере.
Пример: /users, /posts/{id}.
Параметры запроса (необязательно): Пары ключ-значение, добавляемые после ?, которые изменяют или фильтруют запрос.
Пример: ?id=123, ?limit=10
2. Аутентификация: Аутентификация — это процесс проверки личности пользователя перед предоставлением доступа к системе.
Основная аутентификация:
Описание: Клиент отправляет имя пользователя и пароль в заголовке запроса .
Экс: Когда вы входите на веб-сайт, система проверяет ваше имя пользователя и пароль.
Аутентификация по ключу API:
Описание: Ключ API — это уникальный идентификатор, передаваемый клиентом в заголовке запроса или URL для аутентификации.
Например: Когда вы подписываетесь на API погодного сервиса, вы получаете ключ API, который вы включаете в каждый запрос для доступа к погодным данным.
Аутентификация с помощью токена носителя (OAuth 2.0):
Описание: Токен (JWT или OAuth-токен) передается с каждым запросом для подтверждения аутентификации пользователя.
Например: Вход в веб-приложение через Google или Facebook (SSO-логины).
Дайджест-аутентификация:
Описание: Похожа на базовую аутентификацию, но более безопасна, так как хэширует пароль перед отправкой.
Ex: Пароль пользователя хэшируется, и хэш-значение отправляется в запросе. Если ваш пароль «hello123», хэш может выглядеть как «5d41402abc4b2a7».
3. Методы HTTP.
GET: Получение информации
Например: Проверка меню ресторана.
Сценарий: Вы открываете приложение и ищете пиццерию. Приложение показывает список пиццерий и их меню.
POST: Создание чего-то нового
Например: Оформление заказа на еду.
Сценарий: Вы выбираете пиццу, добавляете начинку и оформляете заказ.
PUT: Обновление существующих данных
Например: Изменение адреса доставки.
Сценарий: После оформления заказа вы понимаете, что адрес доставки указан неверно. Вы заходите в свой профиль и обновляете адрес. Все данные профиля будут обновлены заново, если запрос был только на адрес.
PATCH: Частичное обновление данных
Например: Изменение только начинки вашей пиццы. Обновляются только конкретные ингредиенты.
Сценарий: Вы заказали пиццу «Маргарита», но теперь хотите добавить еще сыра. Будет обновлено только запрошенное изменение.DELETE: Удаление данных
Ex: Отмена заказа.
Сценарий: Вы случайно сделали дополнительный заказ и теперь хотите его отменить.
4. Заголовки:
В API-запросах это дополнительные части информации (метаданные), отправляемые вместе с запросом. Они помогают серверу понять, как правильно обработать запрос.
Например: Представьте, что вы заказываете пиццу по телефону. API считывает заголовки, чтобы проверить пользователя, понять формат запроса и ответить соответствующим образом.
Authorization: Bearer your_api_token Content-Type: application/json Accept: application/json User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Referer: https://fooddeliveryapp.com Cache-Control: no-cache
Архитектурные стили API:
- REST (Representational State Transfer): REST — это способ разработки API, который позволяет различным системам взаимодействовать через интернет. Он работает путем отправки запросов и получения ответов. REST может работать с несколькими типами данных, такими как JSON, XML, Text и HTML.
- GraphQL: Это способ получения и отправки данных, который дает вам больше контроля, чем REST. Вместо нескольких запросов на различные части данных, вы можете запросить именно то, что вам нужно, за один раз. Обычно ответ приходит в формате JSON.
- Веб-сокеты: Веб-сокеты обеспечивают двусторонний канал связи между клиентом и сервером. Как только соединение открыто, обе стороны могут отправлять сообщения туда и обратно. Обычно используется с JSON (чаще всего), текстовыми или бинарными данными.
Пример: Используется для таких вещей, как чаты, обновления в реальном времени и игры. - Web hooks: Web hooks это автоматические уведомления. Когда что-то происходит в одной системе, она посылает сообщение другой системе, чтобы уведомить ее о событии. Обычно используются данные в формате JSON.
Например: Платежный сервис отправляет веб-хук на ваш сервер, когда платеж завершен. - SOAP (Simple Object Access Protocol): SOAP — это протокол для обмена структурированной информацией, использующий XML-сообщения. Он более строгий и формальный, чем REST, со встроенными функциями безопасности и транзакций.
Пример: SOAP работает с веб-сервисами в больших, формальных бизнес-системах, таких как банковские, страховые и т. д.
Почему API важны для QA-инженеров?
- API позволяют проверять функциональность, производительность и безопасность на сервисном уровне, не полагаясь на пользовательский интерфейс.
- UI-тесты часто бывают медленными и ненадежными, в то время как API-тесты выполняются быстрее и более надежны, так как выполняются без интерфейса. API помогают оценить время отклика и масштабируемость системы.
- API можно тестировать на ранних этапах цикла разработки, сокращая количество дефектов до того, как они достигнут фронтенда.
- API проверяют главную бизнес-логику, что упрощает проверку потока данных, обработку запросов-ответов и особые случаи.
- Нагрузочное и стресс-тестирование на уровне API помогает выявить узкие места до запуска системы в работу.
Инструменты тестирования API:
- Postman: Удобный инструмент для ручного и автоматизированного тестирования API.
- SoapUI (SmartBear): Комплексный инструмент для тестирования как SOAP, так и REST API, поддерживающий функциональное нагрузочное тестирование.
- Katalon Studio: Low-code инструмент автоматизации тестирования для веб-, мобильного и API-тестирования, объединяющий различные виды тестирования в одной платформе.
- JMeter: Инструмент для тестирования производительности и нагрузки, который в основном используется для проверки масштабируемости и производительности API под большой нагрузкой.
- Rest Assured (для продвинутых пользователей): Библиотека на базе Java для тестирования REST API, обеспечивающая полный контроль над запросами и ответами с минимальным количеством кода.
- Swagger UI (OpenAPI): Инструмент для просмотра и взаимодействия с документацией по API, позволяющий проводить живое тестирование конечных точек API прямо из документации.
На чем нужно сосредоточиться, тестируя API?
Ключевые показатели.
- Корректность конечных точек: Убедись, что API выдает правильные ответы на правильные запросы.
- Методы запросов: Проверка GET, POST, PUT, DELETE и других HTTP-методов, чтобы убедиться, что они ведут себя правильно.
- Проверка правильности ввода: Убедись, что API правильно обрабатывает валидные и невалидные вводимые данные, выдавая соответствующие коды ошибок и сообщения.
- Тело ответа: Убедись, что данные в ответе соответствуют ожидаемому формату (JSON, XML и т. д.) и структуре.
- Заголовки: Проверка заголовков ответа на корректность (например, тип содержимого, токены аутентификации).
- Время отклика: Убедись, что API отвечает в пределах допустимого времени, отдельно в условиях нормальной и пиковой нагрузки.
- Аутентификация и авторизация:
Аутентификация: Речь идет о том , кто ты есть ( например, проверка имени пользователя/пароля или токена).
Авторизация: Речь идет о том, что ты можешь делать (например, к каким ресурсам и действиям тебе разрешен доступ).
- Сообщения об ошибках: Обеспечение того, чтобы API возвращало осмысленные и точные сообщения об ошибках, когда что-то идет не так.
- CRUD-операции: Проверка того, что операции создания, чтения, обновления и удаления работают так, как ожидалось.
- Коды состояния: Проверка того, что для различных типов запросов возвращаются правильные коды состояния HTTP (200, 404, 500 и т.д.). Более подробную информацию о кодах состояния ты найдешь здесь.