API (Application Programming Interface, программный интерфейс приложения), является жизненно важным компонентом в современном ландшафте разработки программного обеспечения, обеспечивая строительные блоки для взаимодействия приложений друг с другом. В этой статье рассмотрим пять основных типов API: REST, SOAP, WebSocket, gRPC и GraphQL, чтобы получить более четкое представление об их функциях, особенностях и идеальных сценариях использования.
REST API (Representational State Transfer)
REST API является наиболее распространенным типом API в клиент-серверной архитектуре и имеет ряд свойств — например, отсутствие хранения состояния и кэшируемость. REST API построен на стандартных протоколах HTTP и обычно возвращает данные в формате JSON, хотя может поддерживать и другие форматы.
REST API использует стандартные HTTP-методы для взаимодействия, включая GET, POST, PUT, DELETE и другие. Каждый метод соответствует определенному типу действий, которые могут быть выполнены над ресурсами API.
Простота и гибкость REST API сделали его лучшим выбором для многих разработчиков, но при работе с большими объемами данных он может быть неэффективными, так как для получения всех необходимых данных может требоваться несколько запросов.
SOAP API (Simple Object Access Protocol)
SOAP — это протокол для обмена структурированной информацией в веб-сервисах с использованием XML. Он обладает высокой расширяемостью и позволяет осуществлять обмен данными через несколько различных транспортных протоколов, включая HTTP, SMTP и другие.
API SOAP известны своей надежностью и часто используются в энтерпрайз-разработке. Они предлагают встроенную обработку ошибок и их можно использовать с различными сетевыми протоколами. Однако зависимость SOAP от XML может приводить к большим объемам передаваемых данных, что делает его менее эффективным по сравнению с другими API в каких-то сценариях использования.
WebSocket API
WebSocket API обеспечивает постоянный, полнодуплексный канал связи между клиентом и сервером. В отличие от REST и SOAP, которые придерживаются формата «запрос-ответ», WebSocket сохраняет соединение открытым, что позволяет передавать данные в режиме реального времени. Это делает WebSocket API идеальным для приложений, требующих функциональности в реальном времени, таких как чат-приложения, онлайн-игры и системы отслеживания в реальном времени.
Несмотря на свою мощь, WebSocket API могут быть более сложными в реализации и требуют больше ресурсов для поддержания открытых соединений.
gRPC API (Google Remote Procedure Call)
gRPC — это высокопроизводительная платформа с открытым исходным кодом, разработанная компанией Google. Он использует протокол HTTP/2 для передачи данных и Protocol Buffers (protobuf), высокопроизводительный формат двоичных данных, в качестве языка определения интерфейса.
gRPC поддерживает четыре типа взаимодействия: унарный (стандартный запрос-ответ), потоковая передача данных с сервера, потоковая передача данных от клиента и двунаправленная потоковая передача. Эти возможности в сочетании с эффективностью делают gRPC идеальным решением для микросервисной архитектуры.
GraphQL API
Разработанный компанией Facebook, GraphQL представляет собой язык запросов к API и рабочую среду для выполнения этих запросов. В отличие от REST API, где вам нужно делать запросы к различным эндпоинтам, чтобы получить соответствующие данные, GraphQL позволяет сделать один единственный запрос, чтобы получить именно те данные, которые вам нужны.
В GraphQL пользователи определяют форму и размер ответа, что приводит к более эффективной загрузке данных и уменьшению избыточной выборки данных. Он отлично подходит для сложных систем и микросервисов, где данные распределены между различными сервисами.
Краткое заключение
Каждый из этих API имеет свои сильные стороны и сценарии использования, понимание которых может помочь в принятии обоснованных проектных решений. REST API являются популярным выбором благодаря своей простоте и широкому распространению. SOAP API хорошо работают в энтерпрайз-средах благодаря своим функциям безопасности. WebSocket API отлично подходят для приложений реального времени, gRPC API — для высокопроизводительных микросервисов, а API GraphQL обеспечивают гибкий поиск данных, что отлично подходит для сложных систем.
Сравнительная таблица
|
REST API |
SOAP API |
WebSocket API |
gRPC API |
GraphQL API |
Формат данных |
Как правило, JSON, но может поддерживать несколько форматов |
XML |
Обычно JSON, но может быть любой тип данных |
Protocol Buffers (бинарный формат) |
JSON |
Протокол |
HTTP/HTTPS |
HTTP/HTTPS, SMTP, XMPP, и другие |
WS/WSS (WebSocket secure) |
HTTP/2 |
HTTP/HTTPS |
Тип связи |
Односторонняя связь (запрос/ответ) |
Односторонняя связь (запрос/ответ) |
Двусторонняя связь (полный дуплекс) |
Двунаправленная потоковая передача |
Односторонняя связь (запрос/ответ) |
Service Discovery |
Не стандартизированы, часто используют OpenAPI (Swagger) для документации |
Стандартизация с помощью WSDL |
Не стандартизировано |
Не стандартизирован, но поддерживает Server Reflection |
Не стандартизировано, интроспекция для обнаружения схем |
Производительность |
Варьируется, обычно ниже, чем бинарные протоколы из-за текстовой природы |
Снижена из-за словесного формата XML |
Выше благодаря полнодуплексной связи и отсутствию накладных расходов HTTP |
Высокий (бинарный протокол, преимущества HTTP/2) |
Варьируется, эффективная загрузка данных может повысить производительность |
Сценарий использования |
Общее назначение, широкое применение |
Распределенные энтерпрайз- среды, унаследованные системы |
Приложения в режиме реального времени, когда серверу необходимо пушить обновления |
Микросервисы, системы, критичные к производительности |
Когда требуется гибкая и эффективная загрузка данных |
Сложность |
От низкого до умеренного |
Высокая |
Умеренная |
От умеренной до высокой |
Умеренная |
Некоторые общие различия в подходе к тестированию различных типов API:
REST API
REST API не используют хранение состояния и могут быть протестированы индивидуально для каждого эндпоинта.
Поскольку REST API обычно используют HTTP, в этих случаях обычно применяются такие инструменты, как Postman, Curl или REST-assured (на Java).
Каждый эндпоинт тестируется с помощью различных HTTP-методов (GET, POST, PUT, DELETE и т.д.), и проверки делаются в отношении кода состояния, времени ответа и тела ответа.
Шпаргалка для тестировщика:
Тестирование эндпоинтов: Убедитесь, что каждый эндпоинт ведет себя так, как ожидается при правильных входных данных.
Коды состояния HTTP: Убедитесь, что в различных ситуациях возвращаются правильные коды состояния.
Обработка ошибок: Отправьте некорректные данные и проверьте, правильно ли API обрабатывает ошибки.
Методы HTTP: Проверьте поведение всех соответствующих методов HTTP (GET, POST, PUT, DELETE и т.д.).
Валидация данных: Убедитесь, что API правильно обрабатывает данные различных форматов, размеров и структур.
Авторизация и аутентификация: Убедитесь, что API правильно реализует и применяет меры безопасности.
SOAP API
SOAP API также не хранит состояние и может быть протестирован на основе операций.
Учитывая, что SOAP API используют XML, проверки обычно выполняются для xml ответов.
Для тестирования часто используются такие инструменты, как SoapUI. Можно проводить контрактное тестирование, поскольку SOAP API четко определены в WSDL.
Шпаргалки для тестировщика:
WSDL-файл: Проверьте WSDL-файл на наличие синтаксических ошибок или несоответствий.
Запросы/ответы SOAP: Убедитесь, что запросы и ответы SOAP правильно отформатированы.
Обработка ошибок: Убедитесь, что API корректно возвращает ошибки для невалидных запросов.
Валидация данных: Проверьте способность API обрабатывать данные различных форматов, размеров и структур.
Безопасность: Убедитесь, что API правильно реализует стандарты WS-Security.
API WebSocket
Поскольку WebSockets обеспечивает полнодуплексную связь, тестирование может быть немного сложным. Необходимо протестировать подключение, отключение, отправку сообщений, получение сообщений и сценарии ошибок.
Для тестирования можно использовать инструменты Postman и WebSocket King или библиотеки websocket-client (Python) и WebSocket-Node (Node.js).
Шпаргалка для тестировщика:
Соединение: Протестируйте функциональность подключения и отключения WebSocket.
Отправка/получение сообщений: Убедитесь, что сообщения правильно отправляются и принимаются в режиме реального времени.
Обработка ошибок: Проверьте способность API обрабатывать ошибки и неожиданные отключения.
Одновременные соединения: Проверьте поведение при нескольких одновременных соединениях.
Формат данных: Убедитесь, что API правильно обрабатывает данные в ожидаемом формате.
API gRPC
Учитывая, что gRPC использует HTTP/2, необходим инструмент, поддерживающий этот протокол. Буферы протокола (protobuf) также требуют специальной обработки.
Инструменты для тестирования включают grpccurl и ghz. Кроме того, юнит-тестирование можно выполнить с помощью различных библиотек, специфичных для данного языка.
Поскольку gRPC поддерживает четыре типа связи (унарная, серверная потоковая, клиентская потоковая и двунаправленная потоковая), требуется тестирование каждого из этих типов.
Шпаргалка для тестировщика:
Валидация сообщений Protobuf: Убедитесь, что сообщения Protobuf структурированы и отформатированы правильно.
Унарные и потоковые вызовы: Тестируйте как унарные вызовы, так и все три типа потоковых вызовов (сервер, клиент, двунаправленные).
Обработка ошибок: Проверьте, как API обрабатывает некорректные запросы или данные.
Производительность: Проверьте производительность API, особенно в сценариях с высокой нагрузкой.
Безопасность: Проверьте реализацию в API аутентификации и шифрования на основе сертификатов.
API GraphQL
В отличие от REST и SOAP, GraphQL основан не на сервисах, а на схеме данных, что требует другого подхода в тестировании. По сути, вы проверяете правильность загрузки данных в соответствии с запросами и мутациями.
Для тестирования можно использовать такие инструменты, как Postman, Apollo Client Developer Tools или даже браузерные IDE, например GraphiQL
Также обычно тестируется избыток или недостаток данных (overfetching и underfetching), поскольку GraphQL позволяет клиентам точно указывать, какие данные им нужны.
Шпаргалка для тестировщика:
Валидация запросов: Убедитесь, что запросы возвращают правильные и ожидаемые данные.
Тестирование мутаций: Проверьте, что мутации правильно создают или изменяют данные.
Обработка ошибок: Убедитесь, что API корректно возвращает ошибки при некорректных запросах/мутациях.
Валидация данных: Проверьте, как API работает с данными различных форматов, размеров и структур.
Избыточная и недостаточная выборка: проверьте, могут ли клиенты правильно указать нужные им данные, без избыточной или недостаточной выборки.
Тестирование различных API с помощью Postman
Postman — это популярный среди разработчиков инструмент для проектирования, тестирования и документирования API. У него простой и удобный интерфейс для отправки различных типов HTTP-запросов. Независимо от типа API, с которым вы работаете — REST, SOAP, WebSocket, gRPC или GraphQL — Postman является инструментом, который может упростить и оптимизировать процесс тестирования.
REST API
Тестировать REST API с помощью Postman несложно. Поскольку REST API использует HTTP-протоколы, вы можете легко отправлять запросы к эндпоинтам, используя такие методы, как GET, POST, PUT, DELETE и т. д. Postman дает возможности проставить заголовки, тело запроса, параметры запроса и позволяет создавать окружения для управления переменными.
SOAP API
Хотя SOAP API обычно использует полезную нагрузку XML и является более подробным, Postman может работать и с ним. Для тестирования SOAP API можно отправить POST-запрос на эндпоинт SOAP с телом XML и заголовками (например, Content-Type: text/xml), установленными соответствующим образом.
WebSocket API
В версии 8.0 Postman представил поддержку WebSocket API. Вы можете отправлять запросы WS (WebSocket) и WSS (WebSocket Secure), а также вести историю переданных сообщений. С помощью WebSocket-соединений Postman позволяет отправлять и получать сообщения, отсоединяться и вновь подключаться к сокету, а также просматривать обновления состояния.
API gRPC
Postman также позволяет тестировать gRPC, импортируя протофайл. Тестирование аналогично тестированию REST.
API GraphQL
Postman имеет надежную поддержку GraphQL API. Вы можете отправлять запросы GraphQL в теле запроса, использовать переменные GraphQL и даже заполнять запросы в Postman автоматическим образом благодаря поддержке схем GraphQL. Postman также позволяет импортировать и проверять схемы GraphQL.
Хотя Postman поддерживает тестирование других типов API, таких как SOAP, WebSocket, gRPC и GraphQL, полный набор его функций, таких как предварительный запрос и тесты, может быть не так легко применим или может потребовать обходных путей для эффективного функционирования. Поэтому при тестировании этих типов API разработчикам могут потребоваться другие специализированные инструменты или расширения для достижения аналогичного уровня глубины и автоматизации тестирования.
С чего начать путь в QA? Какие знания и навыки понадобятся для начала обучения и что нужно изучить, чтобы успешно пройти собеседование? Поговорим об этом на открытом уроке, который пройдёт сегодня вечером. Также рассмотрим примеры инструментов, которые ежедневно использует тестировщик и узнаем, какие слова находятся в словаре айтишника. Занятие пройдет в рамках курса "QA Engineer. Basic".