Общие типы программного интерфейса приложения и веб-сервисов
Говоря о «типах» веб-сервисов, необходимо различать следующие термины, поскольку их легко спутать:
- Протокол, такой как SOAP или XML-RPC, описывает действительный синтаксис запросов и ответов API.
- Архитектурный стиль или парадигма, такая как REST, устанавливает правила и цели API, но не обязательно должна охватывать точный синтаксис или детали взаимодействия.
- Языки описания, такие как WADL (для веб-служб RESTful) или WSDL (для веб-служб на основе SOAP), описывают API только стандартизированным образом. В них перечислены все API-методы и параметры, а также формат запросов и ответов. Языки описания часто используют язык разметки XML
- Такие языки, как GraphQL, JSON или XML, используются для определения формата и синтаксиса вызовов API (запросов и ответов) или описания API. Это означает, что API, имеющий документацию, написанную на XML, может использовать JSON или простые строки запросов для реальных вызовов API, и для этого необязательно использовать также XML.
Протокол API на примере: SOAP
- Simple Object Access Protocol или SOAP - это «облегченный протокол, предназначенный для обмена структурированной информацией в децентрализованной распределенной среде» (https://www.w3.org/TR/soap12-part1) и преемник XML-RPC.
- Его API-вызовы используют вариант языка разметки XML для стандартизированного общения.
- API-интерфейсы SOAP обычно описываются с помощью WSDL
- Концепция инкапсуляции данных определяет сообщения, состоящие из конверта, который содержит заголовок SOAP и тело SOAP.
Необработанный запрос (формат text / xml) для вызова SOAP POST:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sam="http://www.soapui.org/sample/">; <soap:Header/> <soap:Body> <sam:search> <searchstring>Alice</searchstring> </sam:search> </soap:Body> </soap:Envelope>
- После отправки конечная точка API будет искать людей, имя которых совпадает с именем, определенным в теге
<searchstring>
. - Ответ также XML (результат поиска выделен):
º Ответ SOAP следует тем же правилам и синтаксису, что и запрос. Но вместо объекта <sam: search>
он будет использовать <sam: searchResponse>
для обслуживания результата поиска
- Если ничего не найдено, в результате поиска появится сообщение об ошибке:
Описание языка на примере: WADL
- Язык описания веб-приложений - это стандартизированный метод описания веб-приложений на основе HTTP
- Он был разработан для поддержки моделирования и визуализации приложений, генерации кода, а также конфигурации клиента и сервера.
- WADL основан на XML - так же, как SOAP
- Файл описания WADL состоит из необходимого корневого элемента «application», элементов «resources» и нескольких других необязательных элементов:
Также необходимо: выделенный атрибут пространства имен xmlns = «http://wadl.dev.java.net/2009/02»
POSTMAN позволяет напрямую импортировать действительный WADL и генерирует из него новую коллекцию. Этот пример взят из официальной спецификации WADL по адресу https://www.w3.org/Submission/wadl/.
Чтобы импортировать WADL напрямую:
- Нажмите кнопку «Импорт» в верхней части пользовательского интерфейса Почтальона, а затем либо откройте файл WADL в диалоговом окне «Импорт файла», либо выберите параметр «Вставить необработанный текст», чтобы напрямую скопировать код.
- При условии, что синтаксис WADL был правильным, Почтальон будет хранить все запросы из документации в новую коллекцию:
Язык на примере: JSON
JSON является аббревиатурой от «JavaScript Object Notation». Как следует из названия, каждый фрагмент «кода» JSON на самом деле является допустимым объектом javascript. У этого есть много преимуществ:
- Это может быть легко преобразовано в другие языки
- Это имеет очень мало накладных расходов, объект JSON состоит только из очень небольшого числа символов - кроме реальной полезной нагрузки (данных, которые вы отправляете в API или из API). Поэтому его удобочитаемость также хороша - как только вы выучите довольно простой синтаксис:
{"name": "John", age: 31, "city": "New York"}
- Весь объект JSON заключен в фигурные скобки
- Отдельные параметры разделяются запятыми
- Пары ключ-значение разделяются двоеточиями, как в «ключе»: «значение»
- Текст (строки) должен быть в кавычках: «Нью-Йорк»
Допускается несколько типов данных, например строки, числа, массивы и другие объекты JSON (заключенные в фигурные скобки)
º Пример:{"gigs": [
{"name": "pop concert", "description": "a wonderful evening"},
{"name": "festival", "description": "a weekend full of fun"}
]}
- Не требуется никаких интервалов или отступов, но чтобы сделать его более читаемым, рекомендуется использовать отступы и поместить каждый объект в свою строку. Все пробелы, которые не являются частью значения (внутри кавычек), обычно обрезаются и удаляются сервером
Давайте посмотрим на пример с POSTMAN:
- Это тот же запрос, что и раньше (поиск людей по имени), но с JSON на этот раз:
- Результатом также является объект JSON: {«Алиса Сян»}
- Убедитесь, что вы выбрали правильный Content-Type: application / json для запроса
- Если для данной строки поиска нет действительного результата, вы получите «not found» - ответ:
Другие интересные инструменты и технологии тестирования API
В этом курсе вы узнали, как тестировать веб-сервисы с помощью Postman. Конечно, есть и другие инструменты, о которых вы, по крайней мере, должны были слышать.
- SoapUI º SoapUI - это приложение для тестирования как API REST, так и API SOAP. Базовая версия с открытым исходным кодом и бесплатная. Его основное использование - для разработки и выполнения автоматических тестов, но оно также может быть использовано для ручного тестирования.
- GraphQL
º GraphQL, изначально разработанный для и для Facebook, быстро стал популярным языком для веб-сервисов. Эта технология с открытым исходным кодом размещена некоммерческим Linux Foundation
º Язык имеет свой собственный язык определения схемы GraphQL. Это выглядит несколько похоже на JSON. Но помимо того, что он является чистым форматом для передачи данных, он имеет свой очень мощный язык запросов и модификации данных.
- Swagger UI
º Еще один проект с открытым исходным кодом, который помогает отображать документацию веб-сервисов.
º Он состоит из набора ресурсов HTML, Javascript и CSS и может автоматически генерировать веб-документацию для просмотра из любого совместимого API.
Вот файлы сценариев, используемые в запросах этого курса: https://github.com/MartinRJ/testtraining