Ответ
API (Application Programming Interface) — это набор четко определенных правил, протоколов и инструментов, который позволяет различным программным компонентам взаимодействовать друг с другом. API определяет, какие запросы можно делать, как их формировать, какие данные передавать и что ожидать в ответ.
Ключевая идея: API абстрагирует внутреннюю реализацию сервиса, предоставляя внешний контракт для взаимодействия.
Пример HTTP-запроса к REST API на Python:
import requests
# GET-запрос для получения данных
response = requests.get('https://api.example.com/users/1')
if response.status_code == 200:
user_data = response.json() # Ответ в формате JSON
print(f"User: {user_data['name']}")
else:
print(f'Error: {response.status_code}')
Основные типы API:
- REST (Representational State Transfer): Использует стандартные HTTP-методы (GET, POST, PUT, DELETE). Данные обычно в JSON. Самый распространенный стиль для веб-сервисов.
- GraphQL: Позволяет клиенту точно запрашивать только нужные данные в одном запросе, избегая недополучения или переполучения информации.
- SOAP (Simple Object Access Protocol): Основан на XML, имеет строгую спецификацию (WSDL) и встроенные механизмы безопасности, но более сложен и «тяжел».
Для QA-инженера важно тестировать:
- Валидность ответов: Соответствие схеме (JSON Schema), типы данных.
- Статус-коды: Корректность возвращаемых кодов (200, 201, 400, 404, 500).
- Обработку ошибок: Читаемые и безопасные сообщения об ошибках.
- Авторизацию и аутентификацию: Работу с токенами (JWT, OAuth), API-ключами.
- Производительность: Время отклика, нагрузочное тестирование.
- Idempotency (идемпотентность): Повторный идентичный запрос (например, PUT, DELETE) не должен вызывать дополнительных side-эффектов.
Ответ 18+ 🔞
Э, слушай, ты про эти ваши API, да? Ну, это ж, блядь, как договор между двумя программами, которые друг друга в глаза не видели, но должны, сука, работать вместе! Представь: один сервис кричит в пустоту: «Дай мне список пользователей!», а другой из-за угла отвечает: «На, получай, но только по моим правилам, пидор!». Вот эти правила — и есть API, ёпта.
Суть, если по-простому: Внутри у сервиса может быть такой пиздец и бардак, что мама не горюй, но наружу он показывает строгое, вылизанное лицо с чёткими инструкциями: «Тыкаешь сюда — получаешь это. Шлёшь туда — удаляется вот это. Не по формату шлёшь — получишь ошибкой по ебалу».
Вот, смотри, как один сервис может попросить данные у другого на Python:
import requests
# GET-запрос для получения данных
response = requests.get('https://api.example.com/users/1')
if response.status_code == 200:
user_data = response.json() # Ответ в формате JSON
print(f"User: {user_data['name']}")
else:
print(f'Error: {response.status_code}')
Видишь? Отправили вежливый запрос. Если в ответе статус 200 — всё заебись, парсим данные. Если нет — ну, значит, где-то накосячили, и сервер нам вежливо посылает нахуй кодом ошибки.
А какие, блядь, бывают эти API? Да их, как собак нерезаных:
- REST: Это самый, блядь, народный вариант. Всё через HTTP-глаголы: GET (посмотреть), POST (создать), PUT (обновить), DELETE (удалить, ясен хуй). Данные туда-сюда в JSON летают. Просто и понятно, как два пальца обоссать.
- GraphQL: А это уже для хитрожопых. Клиент сам говорит: «Мне от тебя только имя и почту, а всё остальное — нахуй не сдалось». Один запрос — и получаешь ровно то, что просил, без лишней хуйни. Удобно, но, блядь, тестировать его — это отдельная песня.
- SOAP: О, это старый, матёрый пидарас. Тяжёлый, на XML, с кучей своих правил и бумажек (WSDL). Как танк: надёжный, безопасный, но развернуть его — просто ебаться и ебаться. Сейчас его реже используют, но в каких-нибудь древних банковских системах он ещё сидит, блядь.
И вот тебе, как тестировщику, на что смотреть нужно, а то волнение, ёбать, чувствую, что забудешь:
- Ответы: Пришёл JSON — он должен быть как в документации, а не какая-то левая хуйня с не теми типами данных. Схемы проверяй!
- Коды ответов: Получил 200 — радуйся. Получил 404 — ищи, что не так. Получил 500 — это уже сервер обосрался. Каждый код должен быть по делу.
- Ошибки: Если что-то пошло не так, ошибка должна быть понятной человеку, а не «Error: 0xFUCCUP», и уж точно не вываливать наружу пароли или служебные пути, ядрёна вошь!
- Доступ: Как авторизуемся? По ключу? По токену? Укради токен и попробуй им воспользоваться — должен получить отлуп, а не доступ ко всему.
- Скорость: Сколько тянет ответ? А если десять тысяч запросов одновременно послать? Не должен сервер ложиться и накрываться медным тазом.
- Идемпотентность (запомни это слово, а то звучит как болезнь): Это когда повторный одинаковый запрос (особенно PUT или DELETE) не должен вызывать новый эффект. Отправил «удали пользователя 1» два раза — пользователь должен удалиться один раз, а не дважды, и уж тем более не воскреснуть на третий, блядь. Вот это вот всё и проверяй, чтобы не было пиздопроебибны.