Soap это: SOAP API — что это такое за протокол обмена структурированными сообщениями

Применение SOAP при интеграции систем

Применение SOAP при интеграции систем

Для начинающих аналитиков,

не имеющих опыта web-разработки

Смотреть запись вебинара

Историческая справка

В предыдущей статье мы говорили про то, что REST — это архитектурный стиль, который Рой Филдинг сформулировал в своей диссертации в 2000 году.

С протоколом SOAP дела обстоят несколько иначе.
SOAP — это не стиль, а протокол. Аббревиатура SOAP так и расшифровывается: Simple Object Access Protocol — простой протокол доступа к объектам. То есть правила передачи информации в SOAP строго стандартизированы, есть спецификация, которой нужно соответствовать.

SOAP появился 1998 году и был передан в организацию World Wide Web Consortium (W3C) — международная организация, которая курирует развитие интернета.

Почему разница в 2 года в появлении REST и SOAP так сказалась на их популярности?

Все просто — компания Microsoft активно вкладывала деньги в продвижении SOAP. На тот момент Microsoft активно продвигал свою новую платформу .NET (платформа, в которой все конфигурационные файлы представлены в формате XML, и используется протокол SOAP). Так вот, на рекламу этой платформы Microsoft потратил 200 млн долларов.

Если сравнить это с тем фактом, что Рой Филдинг просто представил REST в своей диссертации, то вы поймете, почему SOAP завоевал популярность очень быстро.

Тем не менее на данный момент можно говорить о том, что в основном для интеграции систем используется REST.

Жив ли еще SOAP?

Просмотрев статистику вакансий на сайте hh.ru, можно обнаружить, что примерно четверть вакансий аналитиков содержат требования к знанию SOAP, WSDL и, как следствие, XML. В основном это крупные компании, которые занимаются проектами более 10 лет (банки, телеком).

В чем разница между REST и SOAP?


Для того, чтобы наглядно показать отличие REST от SOAP, приведем вот такую аналогию. Представьте себе дерево, в котором есть дупло, и из этого дупла выглядывает птичка. Когда вы обращаетесь к какому-то приложению, вы как будто обращайтесь к такому дереву и стучитесь в окошко. Условно можно считать, что в это окошко выглядывает некоторая функция.

Если вы работаете с REST, то можно себе представить дерево, в котором есть много таких окошек — большое количество птичек, каждая из которых выглядывает из своего дупла. Это дупло называется Endpoint, но это отдельный разговор. Важно, что каждый раз, обращаясь к дуплу, вы обращаетесь только к одной функции.

SOAP основывается на технологии удаленного вызова процедур. Сервис, который работает на базе SOAP — это дерево с одним-единственным дуплом. Но каждый раз, обращаясь к этому дуплу, вы должны указать название процедуры, то есть название функции, которую вы хотите вызвать, потому что функций там может быть несколько. И, разумеется, вы должны передать те входные данные, которые нужны для процедуры, которую вы собираетесь вызвать.

Что из себя представляет SOAP
и когда его нужно использовать


Клиент-серверная архитектура приложения

В SOAP передача данных идет по протоколу HTTP, то есть также, как это происходит и в случает REST-запросов.

Давайте рассмотрим на примере. Если я зайду на сайт какой-нибудь биржи акций, то могу узнать курс интересующей меня акции. Откуда поступает эта информация? Давайте разберемся.


Клиент и сервер SOAP

Я открываю на своем компьютере браузер, который является клиентом. По протоколу HTTP он обращается к серверу (назовем его HTTP-server).

На этом HTTP-сервере живёт приложение, которое отдает мне информацию, о том, что акция Facebook стоит, к примеру, 252 доллара. Однако, откуда само приложение, живущее на HTTP-сервере, знает стоимость акции?

А все очень просто — приложение в данном случае выступило как SOAP-client и запросило эту информацию на другом сервере (назовем его SOAP-server).

Взаимодействие SOAP-client и SOAP-server происходит по протоколу SOAP поверх HTTP. Что значит поверх? Это значит, что клиент и сервер общаются по протоколу HTTP, но по этому протоколу передаётся не просто стандартное сообщение HTTP, а некий конвертик с письмом, причем это письмо написано по правилам протокола SOAP.

То есть сайт, который передал мне информацию о Facebook, сам запросил SOAP-server (то есть биржу акций) по протоколу HTTP и вложил сообщение в конвертик SOAP.

Таким образом, информация о курсе акции пришла ко мне не напрямую с биржи, а через посредника — через SOAP-client.

Курс Елены Бенкен

«Основы проектирования интеграций»

Курс для ИТ-аналитиков и проектировщиков, знакомых с техникой use cases (сценарии использования) и разработкой требований к качеству ПО,
которым необходимо разобраться в теме интеграций и
научиться проектировать взаимодействие ИТ-систем

Посмотреть программу курса

Стек протоколов веб-сервисов

Давайте посмотрим на стек технологий, которые используются в данном случае:


Протоколы веб-сервисов

Когда мы работаем по сети, мы работаем с протоколами TCP/IP — это нижний, сетевой уровень протоколов. Весь интернет базируется на протоколе HTTP, который мы рассматривали в предыдущей статье. HTTP является просто транспортом, с помощью которого информация передается по сети.

Чтобы передать какое-либо сообщение по сети, оно должно соответствовать правилам протокола HTTP. А дальше в пакетик, передаваемый по протоколу HTTP, вкладывается сообщение по протоколу SOAP. И все это живет по правилам, описанным в файле WSDL.

Как выглядит xml-документ?

Представьте себе, что вы хотите передать по сети некоторую записочку. И вы хотите, чтобы информация в ней была структурирована так, чтобы записку могла прочитать программа.

В качестве примера приведу записку, которую Анна пишет Марии: «Приходи ко мне в гости в воскресенье!». И заголовок: «Напоминалка» (Reminder). Здесь могла бы быть ещё подпись signature, но, как видите, подпись оказалась пустой, информация в теге не передана (такое тоже возможно).

Тег — это текстовая строка, завернутая в уголочки (<>).


Пример XML-документа

То есть, когда мы передаем XML-документ, мы информацию «заворачиваем» в теги. Они предназначены для того, чтобы объяснять, что лежит внутри. Теги бывают открывающие (перед текстовым содержимым) и закрывающие (начинается с символа «/»).

В HTML такие же теги, но они применяются немного по-другому: в языке XML эти теги предназначены для того, чтобы объяснить приложению, которое принимает сообщение, что именно вложено внутрь.

Приложение, которое принимает записку, заранее знает, какие должны прийти данные внутри каких тегов. И знает оно это благодаря WSDL.

Что такое WSDL? В SOAP для описания своего сервиса нужно использовать строгие правила в виде файлов WSDL. Ниже мы разберем это подробнее, но вообще WSDL — это Web Services Description Language, ещё один язык описания веб-сервисов и доступа к ним.

Как устроен xml-документ?

Разберем приведенный ранее пример детальнее.

Первая строка документа — XML-декларация, она указывает на версию XML (version=»1.0″) и тип кодировки документа (encoding=»utf-8″).

XML-декларация всегда начинается с символов <?xml и заканчивается символами ?>.
Декларация должна располагаться в самом начале файла, то есть первым символом файла должна быть угловая скобка и никаких концов строки или пробелов.

Правильно оформленный XML соответствует правилам:

  • Каждый открывающий тег должен иметь соответствующий закрывающий тег.
  • Теги не могут перекрывать друг друга.
  • XML- документы должны иметь только один корневой элемент.
  • Регистр символов (верхний/нижний) для XML существенен.

Что ещё есть в xml-документе?
Всё XML-сообщение (наша записочка) заворачивается в так называемый корневой тег. В данном случае, корневым является тег note, который выделен зеленым.

Правильно оформленный XML это такой XML, который соответствует стандартам языка и может быть разобран приложением, то есть приложение его получит, проверит синтаксис и начнет разбирать.

Важно понимать, что приложение не будет разбирать XML если он не будет правильно оформлен. В этом случае приложение придёт к выводу, что XML повредили или подменили по дороге.

Если мы посмотрим на XML-документ внимательно, то сможем построить вот такое дерево:


Дерево XML-документа

То есть с точки зрения приложения XML представляет собой дерево, состоящее из узлов. Например на картинке вы можете видеть имена узлов: note, to, from, heading, body, signature.

Узлы вкладываются друг друга, и получается, что XML-документ можно представить в виде перевернутого дерева, только дерево растет вниз. Тeг note является корнем и в него вложены остальные теги, все они являются детьми этого корня. Кроме того, есть ещё текстовых узлы Мария, Анна и т. д.

Атрибуты элементов в XML

Теги могут содержать атрибуты, то есть мы можем вложить атрибуты в корневой тег. Посмотрите, информация о том, от кого записка (from) и кому (to) в приведенном ниже кусочке XML оформлена не как теги, а как атрибуты тега note.


Пример тега, содержащего атрибут

Смысл XML в том, что теги удобно обрабатывать, и вариант, когда вы вкладываете информацию в виде текстовых узлов внутри тегов, довольно устойчив к ошибкам.
Представьте себе, что по пути потеряется буква «r» в слове from. Если она потеряется только в одном месте, то посмотрев на первый тег, мы поймем, как должен называться второй, или во всяком случае мы поймём, где произошла ошибка.

Разговоры о том, что какая-то буква потерялась, не очень актуальны сейчас, так как современные протоколы обеспечивают целостную доставку. Данный пример призван продемонстрировать, что XML-документ в первую очередь создаётся для того, чтобы информацию вкладывать в теги.

Атрибуты — это пары имя/значение, поставленные в соответствие одному из элементов. Они должны находиться при открывающем теге, но не при закрывающем.

Атрибуты всегда должны иметь значение, даже если значением является всего лишь пустая строка. Значения атрибутов должны заключаться в кавычки. При этом согласно синтаксису XML допускаются как двойные, так и одинарные кавычки.

Если вам придется руками формировать XML-документ, никогда не пишите в одном документе и двойные и одинарные кавычки, просто потому что вам лень аккуратненько расставить однотипные, поскольку это может привести к ошибкам.

Пространства имён

Чтобы наглядно объяснить, что такое пространство имён, рассмотрим следующий пример.

Представьте себе, что по интернету ходят XML-документы, сформированные разными приложениями (собственно, так и происходит). Может случиться, что одно приложение использует тег table и второе тоже использует тег table, но уже совсем в другом смысле.

Например, в первом случае тег table — это текст, который используется в языке HTML для указания того факта, что дальше идет описание таблицы. А во втором — предназначен для того, чтобы описать африканский кофейный стол и его размеры.

Как сделать так, чтобы приложение определило, что это разные теги table?


XML-документы с тегом table

Чтобы раскрыть тему, давайте рассмотрим бытовую аналогию: как учителя различают детей, которые приходят в класс.

У себя дома имя мальчика Серёжи, скорее всего, является уникальным идентификатором. То есть, вероятнее всего, ни одного Серёжи в семье больше нет. Но когда Серёжа приходит в школу, он обнаруживает, что в классе ещё три Серёжи, и учителю их надо как-то различать.

Как это сделать? Как правило, в классе для этого используется фамилия ребенка. Но если в классе есть однофамильцы Серёжи? Что ж, и такое бывает. В этом случае отличать Серёж можно по их домашнему адресу.

Интересный момент: если учитель знает, что Серёжа Васильев живёт по этому адресу, а тут в класс приходит некая Аня Васильева, живущая по этому же адресу, то можно сделать логичный вывод, что, скорее всего, Серёжа и Аня — брат и сестра. Именно адрес и указывает учителю на то, какая это семья и где она живёт. В XML-документах точно такая же логика.

Если нам нужно определить пространство имён (семью), к которому относится тег, мы заводим специальный атрибут. Этот атрибут называется XML namespace, сокращенно xmlns. Именно в xmlns мы пишем адрес — то место, где публикуется стандарт стандарта языка (то есть в атрибуте xmlns указывается адрес документа, в котором явно описано, что такое table для документа HTML).

В случае с кофейным столиком мы, разумеется, пишем другой адрес. Интересно, что это может быть абсолютно любой адрес, он может даже не существовать на самом деле, поскольку используется только для идентификации. То есть, вот этот тег table живет по этому конкретному адресу, и там же живёт вся его семья.

Что из себя представляет семья тегов?
Правило такое: если тег, у которого указано пространство имён, содержит вложенные теги, то эти вложенные теги относятся к тому же пространству имён.

То есть наш кофейный столик — это теги:

  • name
  • width
  • lenght
  • table

Все они из одного семейства тегов, как те самые Серёжа и Анна, которые относятся к одной семье.

Поэтому для того, чтобы идентифицировать теги, используется атрибут — атрибут пространства имён xmlns.

Пространство имён записывается как атрибут и это тоже узел дерева, только узел другого типа. У него также есть текстовое содержимое, только это особое текстовое содержимое. В целом, это тоже XML-документ просто узлы здесь разные (элементные и атрибутные).

Сообщения SOAP

Для эффективной работы нам, аналитикам, вполне достаточно знания основ синтаксиса XML. И для того, чтобы разбираться с SOAP, приведенных знаний будет достаточно. Если же вы захотите углубиться в детали, то про XML стоит читать в первоисточнике, то есть на сайте W3C.

Ранее в примерах мы говорили про обмен данными между сайтом и биржей акций. Как это происходит?

Чтобы отправить запрос в биржу акций, нужно ответить на простой вопрос. Facebook и сайт биржи акций должны ответить «252.36» — это содержимое, которое надо передать. Протокол SOAP предполагает, что это текстовое содержимое вложено внутрь XML-тегов и прописано в стандарте в виде XML-дерева.


Запрос и ответ в виде дерева

Как мы видим, для того, чтобы сложить Facebook и отправить его в виде конверта, текст «Facebook» вкладывается в тег symbol. Тег symbol вкладывается в getQuote. Тег getQuote вкладывается в Body, а он в свою очередь, вкладывается в Envelope.


Запрос по протоколу SOAP

Давайте разберем на составляющие данный запрос.

Envelope и Body — теги, которые прописаны в протоколе SOAP. То есть, если вы отправляете запрос по протоколу SOAP, то у вас должен быть тег Envelope и вложенный в него тег Body. Это нужно просто запомнить.

SOAP-ENV — обозначение пространства имён, то есть теги Envelope и Body относятся к пространству имён SOAP-овского окружения и это не что иное, как краткое указание на то, что есть определенное семейство тегов. А где описывается пространство имён, мы разберем немного позже.

getQuote (получить котировку) — имя процедуры, которую мы хотим вызвать. Она относится уже к другому пространству имён, а именно «ns1».

«Faсebook» — это входной параметр, который мы передаем, и он завернут в тег Symbol. Обратите внимание на атрибут, который есть в этом теге «string» — он описывает, что передаваться должно не число, а строка.

Ответ по протоколу SOAP выглядит в виде дерева:


Ответ по протоколу SOAP

Согласно представленному дереву документов, ответ содержит «252.36». Он завернут в тег Result. A Result, в свою очередь, завернут в getQuoteResponse (ответ в котором содержится котировка акций). Далее getQuoteResponse завернут в Body, а тот в свою очередь — в Envelope.

Web Services Description Language (WSDL)

Давайте теперь вернемся к WSDL — документу, благодаря которому приложение заранее знает, какие должны прийти данные внутри каких тегов.

Основные теги с которыми вы столкнетесь в описании WSDL-сервера:

  • Message — сообщения, используемые web-сервисом.
  • PortType — список операций, которые могут быть выполнены с
  • сообщениями.
  • Binding — способ, которым сообщение будет доставлено.

WSDL-сервер

Как все это выглядит?
На веб-сервисе лежит файл WSDL. И клиент, и сервер руководствуются в своей работе этим файлом: читают его и разбираются, как устроен сервис. И клиент, и сервер умею читать этот файл и получать из него информацию, так как они знают стандарт SOAP и то, как должен быть устроен файл WSDL.

Давайте разберем этот wsdl-файл:


WSDL-файл

Operation — это тег, который описывает функции. То есть он указывает на имя функции и то, как должен выглядеть запрос и ответ.

Вложенные в operation теги input и output содержат информацию о входных и выходных параметрах функции. То есть getQuoteRequest — это запрос, который представляет собой строку и должен иметь вид числа с плавающей точкой.

Тег binding описывает все технические сведения, о том, что из себя представляет сервис.

Тег servisce описывает, где живет наш сервис. Если бы мы установили веб-сервисом на локальной машине, то адрес написали бы следующим образом: localhost/server1. php/.

Если вы захотите расписать WSDL в виде дерева, то получите следующую картину:


WSDL-файл в виде дерева

Корневой тег definitions содержит 2 тега message, описывающие входной и выходной параметры.

Далее идет тег portType, включающий в себя тег operation, который также описывает входной и выходной параметры. PortType же собирает вместе информацию из двух тегов message.

Тег binding описывает все технические особенности нашего сервера. Считается довольно сложным в прочтении для начинающих.

Тег service содержит описание нашего сервера.

Выводы

Главным недостатком SOAP является то, что при его использовании для передачи сообщений, он увеличивает их объём и снижает скорость обработки.
Мы смогли в этом убедиться на примере вопроса «Facebook» и ответа «252.36», которые требуют огромного количества тегов, в которые заворачивается вопрос.

Для того, чтобы еще раз сравнить SOAP и REST, я привела преимущества приложения, созданного на основании REST:

  1. Надёжность (за счёт отсутствия необходимости сохранять информацию о состоянии клиента, которая может быть утеряна).
  2. Производительность (за счёт использования кеша).
  3. Масштабируемость.
  4. Прозрачность взаимодействия между системами по сети.
  5. Простота интерфейсов.
  6. Портативность компонентов.
  7. Лёгкость внесения изменений.
  8. Способность эволюционировать, приспосабливаясь к новым требованиям.

Поясним несколько важных моментов. Если говорить о простоте интерфейсов, то разумеется REST проще, так как передает информацию в файле формата JSON, а формат JSON специально создан для языка JavaScript, на котором работает браузер.

Для SOAP необходимо специальное приложение, чтобы разобрать XML-документ, распарсить его, как говорят в ИТ-среде.

Относительно легкости внесения изменений хочется заметить: для того, чтобы изменить WSDL, мы, разумеется, можем изменить адрес, но это непросто. SOAP — консервативный протокол, он используется преимущественно в Legacy-системах, но, тем ни менее, знание SOAP пользуется достаточно большим спросом.

Курс Елены Бенкен

«Основы проектирования интеграций»

Курс для ИТ-аналитиков и проектировщиков, знакомых с техникой use cases (сценарии использования) и разработкой требований к качеству ПО,
которым необходимо разобраться в теме интеграций и
научиться проектировать взаимодействие ИТ-систем

Посмотреть программу курса

Вопросы

  • Вопрос:

    Как создать тег Biding?

    Ответ:

    Аналитик не должен озадачиваться тем, как создавать тег binding. Это должен делать программист биржи акций, если мы запрашиваем у нее WSDL, а не программист приложения, в котором мы используем этот WSDL (то есть не программист сайта биржи акций).

  • Вопрос:

    Как записаться на курс по проектированию интеграций ИТ-систем?

  • Вопрос:

    Как происходит асинхронное взаимодействие по протоколу SOAP? Например, отправлен запрос, он будет несколько минут обрабатываться. Отправляется ли сообщение о том, что запрос получен и взят в работу?

    Ответ:

    Асинхронное взаимодействие — это когда вы отправляете запрос, а ваш клиент не ждет ответа, а продолжает что-то делать. Отправляется ли сообщение о том, что запрос взят в работу, зависит от того, как спроектирован и реализован сервер, то есть от программиста. Если сервер предусматривает ответ при получении запроса, то мы этот ответ увидим.

Елена Бенкен

Системный аналитик, Автор курсов и Преподаватель

  • Имеет опыт разработки ТЗ в тематике спутниковой связи, программ лояльности;
  • Многолетний опыт участия в разработке навигационных систем для космических аппаратов, проектировании и макетировании микроэлектронных устройств;
  • Автор учебных курсов по php, mysql, javascript, jquery, ajax, Linux;
  • Написала и издала в BHV книги «PHP, MySQL, XML. Программирование для Интернета», «AJAX. Программирование для Интернета»;
  • Выпускник Питерского политеха по специальности «физика космоса».

Подписаться на новые статьи

Что такое SOAP? — Stack Overflow на русском

Вот вам, например, надо передать некоторому серверному сценарию имена и значения переменных — такое происходит практически при каждом переходе по ссылке или после нажатию на кнопке формы. Выглядит это так:

http://www.server.ru/page.php?name=Vasya&age=20&sex=male&street=Gagarin%2013&city=Tashkent&country=Uzbekistan

Здесь передаются 6 переменных (name, age, sex, street, city и country) со своими значениями. page.php, в свою очередь, принимает эти значения и обрабатывает в соответствии с заданными инструкциями. Все эти переменные равны по статусу в цепочке и не описывают зависимость друг от друга (ниже поймете, что это означает). Тем более, даже если всего лишь логически рассматривать все 6 переменных как одну связку, то они описывают один объект, — т. е. некоторого индивидуума мужского пола, которого зовут Вася и которому 20 лет (и т.д), хотя

нигде в этом URL не говорится, что все 6 переменных вместе описывают один объект. Только интуитивно мы догадываемся и это подходит только для этого примера.

Понятно, что у этих 6-ти переменных нет описания зависимости друг от друга — но для того, чтобы показать зависимость и иерархию, надо что-то добавить…. И тогда приходит на помощь XML.

XML, как вам уже известно, предоставляет удобный синтаксис для описания иерархии данных. Формат вам уже знаком:

<person>
    <id>1000</id>
    <name>Vasya</name>
    <age>20</age>
    <sex>male</sex>
    <address>
        <street>Gagarin 13</street>
        <city>Tashkent</city>
        <country>Uzbekistan</country>
    </address>
</person>

В коде выше наглядно видны зависимость и иерархия.

Единицей информации, описывающей 1 объект, является пространство от <person> до </person>, которое имеет вложенные элементы, расположенные по иерархии относительно <person> ниже. Вложенные элементы, как видно из <address>, тоже могут иметь свои вложенные элементы. Грубо говоря, пространство <person> описывает объект индивидуума (вместе с <address> и т.д., так как является старшим в иерархии), а вот <address> внутри <person> еще и группирует свое подпространство из <street>, <city> и <country>. Т.е. если символически спросить адрес, то получим 3 значения из вложенных элементов (замечу, что это всего лишь символическое объяснение).

Так вот, передавая в SOAP именно такую структуру, мы можем сообщить некоему серверному сценарию не только переменные и их значения, но и их зависимость и иерархию. Вот я неслучайно привел пример с <address> — ведь серверному сценарию очень легко получить полный адрес из трех элементов, видя, что родительский (объединяющий) элемент <address> имеет вложенные элементы! Как бы вы тогда сгруппировали бы эту структуру зависимости, используя обычный формат (как приведено в примере URL в самом начале)? Ок, в таком случае где-то в серверном сценарии должно быть указано, что некий адрес необходимо формировать из значений street, city и country — тоже выход, не спорю.

А теперь усложним задачу: вам надо передать за один раз данные о нескольких «Васях». SOAP дает нам такую возможность:

<customers>
    <person>
        <id>1000</id>
        <name>Vasya</name>
        ....
    </person>
    <person>
        <id>1001</id>
        <name>Petya</name>
        ....
    </person>
</customers>

Но вот как организовать это с помощью конструкции name=Vasya&age=20&sex=male? Дважды имя переменной (хотя бы) name (одно для Васи, другое для Пети) ведь невозможно использовать в одной строке. .

Вот ниже рабочий пример, как SOAP используется на практике (из одного из моих рабочих проектов). Нетрудно визуально увидеть структуру данных и их иерархию (специально привожу очень простой пример из двух значимых переменных String_1 и String_2). Выше видны верхние атрибуты и соответствующий синтаксис, принятый для сообщений SOAP (почитайте документацию).

P.S. Написано весьма условно и символически — целью ставил уровень специально для читателя, который, ознакомившись, пойдет по правильному руслу.

REST против SOAP

перейти к содержанию

Введите ключевые слова

Поддержка Консоль Начать пробную версию Контакт

Выберите язык 简体中文EnglishFrançaisDeutschItaliano日本語한국어PortuguêsEspañol

Связаться с нами

Выберите язык

  • 简体 中文
  • Английский
  • Français
  • Deutsch
  • Итальян
  • 日本語
  • 한국어
  • PortugUs
  • 0012
  • Испанский

Добро пожаловать,

Войдите в свою учетную запись Red Hat

Войдите в систему

Ваша учетная запись Red Hat дает вам доступ к вашему профилю участника и предпочтениям, а также к следующим услугам в зависимости от вашего статуса клиента:

Зарегистрируйтесь сейчас

Еще не зарегистрированы? Вот несколько причин, по которым вы должны это сделать:

  • Просматривайте статьи базы знаний, управляйте обращениями в службу поддержки и подписками, загружайте обновления и многое другое из одного места.
  • Просмотрите пользователей в вашей организации и измените информацию об их учетных записях, предпочтениях и разрешениях.
  • Управляйте своими сертификатами Red Hat, просматривайте историю экзаменов и загружайте логотипы и документы, связанные с сертификацией.

Изменить свой профиль и настройки

Ваша учетная запись Red Hat дает вам доступ к вашему профилю участника, настройкам и другим услугам в зависимости от вашего статуса клиента.

В целях безопасности, если вы находитесь на общедоступном компьютере и завершили использование служб Red Hat, обязательно выйдите из системы.

Выход из системы

Логин аккаунта

Выберите язык

  • 简体 中文
  • Английский
  • Français
  • Deutsch
  • ИТАЛАНАО
  • 日本語
  • 한국어
  • PortuguêS
  • ESPAYOL
  • PortuguS
  • REST и SOAP — это два разных подхода к онлайновой передаче данных.

    В частности, оба определяют, как создавать интерфейсы прикладного программирования (API), которые позволяют передавать данные между веб-приложениями. Передача репрезентативного состояния (REST) ​​— это набор архитектурных принципов. Простой протокол доступа к объектам (SOAP) — это официальный протокол, поддерживаемый консорциумом World Wide Web (W3C). Основное отличие состоит в том, что SOAP — это протокол, а REST — нет. Как правило, API придерживается либо REST, либо SOAP, в зависимости от варианта использования и предпочтений разработчика.

    Загрузите руководство пользователя нашего API

    REST — это набор архитектурных принципов, адаптированных к потребностям облегченных веб-сервисов и мобильных приложений. Поскольку это набор рекомендаций, реализация этих рекомендаций предоставляется разработчикам.

    Когда запрос данных отправляется в REST API, это обычно выполняется через протокол передачи гипертекста (обычно называемый HTTP). После получения запроса API-интерфейсы, разработанные для REST (называемые RESTful API или веб-службами RESTful), могут возвращать сообщения в различных форматах: HTML, XML, обычный текст и JSON.

    JSON (объектная нотация JavaScript) предпочтительнее в качестве формата сообщения, потому что он может быть прочитан любым языком программирования (несмотря на название), удобен для чтения человеком и машиной и имеет небольшой вес. Таким образом, RESTful API более гибкие и их проще настроить.

    Приложение называется RESTful, если оно соответствует 6 архитектурным рекомендациям. Приложение RESTful должно иметь:

    1. Архитектуру клиент-сервер, состоящую из клиентов, серверов и ресурсов.
    2. Взаимодействие клиент-сервер без сохранения состояния, означающее, что содержимое клиента не сохраняется на сервере между запросами. Вместо этого информация о состоянии сеанса хранится у клиента.
    3. Кэшируемые данные для устранения необходимости в некоторых взаимодействиях клиент-сервер.
    4. Единый интерфейс между компонентами, чтобы информация передавалась в стандартизированной форме, а не в соответствии с потребностями приложения. Это описывается Роем Филдингом, создателем REST, как «центральная особенность, которая отличает архитектурный стиль REST от других сетевых стилей».
    5. Ограничение многоуровневой системы, при котором взаимодействие клиент-сервер может быть опосредовано иерархическими уровнями.
    6. Код по запросу, позволяющий серверам расширять функциональные возможности клиента путем передачи исполняемого кода (хотя это также снижает видимость, что делает это необязательным правилом).

    SOAP — это стандартный протокол, который изначально был разработан для того, чтобы приложения, созданные на разных языках и на разных платформах, могли обмениваться данными. Поскольку это протокол, он налагает встроенные правила, которые увеличивают его сложность и накладные расходы, что может привести к увеличению времени загрузки страницы. Однако эти стандарты также предлагают встроенные соответствия, которые могут сделать их предпочтительными для корпоративных сценариев. Встроенные стандарты соответствия включают безопасность, атомарность, согласованность, изоляцию и надежность (ACID), которые представляют собой набор свойств для обеспечения надежных транзакций базы данных.

    Общие спецификации веб-сервисов включают:

    • Безопасность веб-сервисов (WS-безопасность) : стандартизирует способы защиты и передачи сообщений с помощью уникальных идентификаторов, называемых маркерами.
    • WS-ReliableMessaging : Стандартизирует обработку ошибок между сообщениями, передаваемыми через ненадежную ИТ-инфраструктуру.
    • Адресация веб-сервисов (WS-адресация) : Упаковывает информацию о маршрутизации в виде метаданных в заголовках SOAP вместо того, чтобы хранить такую ​​информацию глубже в сети.
    • Язык описания веб-служб (WSDL) : Описывает, что делает веб-служба, и где эта служба начинается и заканчивается.

    Когда запрос данных отправляется в SOAP API, он может быть обработан через любой из протоколов прикладного уровня: HTTP (для веб-браузеров), SMTP (для электронной почты), TCP и другие. Однако после получения запроса возвращаемые SOAP-сообщения должны быть возвращены в виде XML-документов — языка разметки, который читается как человеком, так и машиной. Завершенный запрос к SOAP API не кэшируется браузером, поэтому к нему невозможно получить доступ позже без повторной отправки в API.

    Многие устаревшие системы могут по-прежнему придерживаться SOAP, в то время как REST появился позже и часто рассматривается как более быстрая альтернатива в веб-сценариях. REST — это набор рекомендаций, предлагающих гибкую реализацию, тогда как SOAP — это протокол с особыми требованиями, такими как обмен сообщениями XML.

    REST API являются легкими, что делает их идеальными для новых контекстов, таких как Интернет вещей (IoT), разработка мобильных приложений и бессерверные вычисления. Веб-службы SOAP предлагают встроенную безопасность и соответствие транзакциям, которые соответствуют многим корпоративным потребностям, но также усложняют их работу. Кроме того, многие общедоступные API, такие как Google Maps API, следуют рекомендациям REST.

    Red Hat предоставляет вам модульные, легкие и комплексные решения API с открытым исходным кодом, открытыми стандартами и доступными локально или в облаке. Они играют важную роль в том, как вы можете оптимизировать свои ИТ, чтобы сделать их более гибкими и быстрее приносить пользу.

    Нужно знать, что такое интеграция? Узнайте, что это такое, как его внедрить и почему он намного лучше с открытым исходным кодом.

    Apache Kafka — это распределенная платформа потоковой передачи данных, которая может публиковать, подписываться, хранить и обрабатывать потоки записей в режиме реального времени.

    API означает интерфейс прикладного программирования — набор определений и протоколов для создания и интеграции прикладного программного обеспечения.

    Продукты

    Комплексный набор технологий интеграции и среды выполнения, разработанных для помощи в создании, развертывании и эксплуатации приложений с учетом требований безопасности и масштабируемости в гибридном облаке.

    Размещаемые и управляемые платформы, приложения и службы данных, которые упрощают работу с гибридным облаком, снижая эксплуатационные расходы и сложность доставки облачных приложений.

    Набор продуктов, инструментов и компонентов для разработки и поддержки облачных приложений. Включает Red Hat AMQ, Red Hat Data Grid, платформу корпоративных приложений Red Hat JBoss®, веб-сервер Red Hat JBoss, сборку Red Hat OpenJDK, сборку Red Hat Quarkus, набор облачных сред выполнения, набор инструментов для миграции приложений. , единый вход и служба запуска.

    Комплексный набор технологий интеграции и обмена сообщениями для соединения приложений и данных в гибридных инфраструктурах. Включает Red Hat 3scale API Management, Red Hat AMQ, Red Hat Fuse, Red Hat Runtimes, сбор данных об изменениях и реестр служб».

    Связанные статьи
    • Что такое интеграция?

    • Что такое сервисный реестр?
    • Что такое сетка событий?
    • Что такое Apache Kafka?
    • Что такое сбор измененных данных (CDC)?
    • Что такое архитектура, управляемая событиями?
    • REST против SOAP
    • Почему стоит выбрать Red Hat для гибкой интеграции?
    • Зачем запускать Apache Kafka в Kubernetes?
    • Что такое IDE?
    • Понимание промежуточного программного обеспечения
    • Что такое промежуточное ПО?
    • Почему стоит выбрать ПО промежуточного слоя Red Hat?
    • Понимание API

    • Безопасность API
    • Что такое API?
    • Что делает шлюз API?
    • Что такое REST API?
    • Что такое дизайн API?
    • Что такое управление API?
    • Что такое монетизация API?
    • Что такое GraphQL?
    • Почему стоит выбрать Red Hat для управления API?
    Ресурсы

    Создайте гибкую инфраструктуру и сделайте организацию адаптивной

    Оптимизация производительности приложений и бизнес-результатов

    ANALYST MATERIAL

    The Event Mesh: A Primer

    DATASHEET

    Red Hat Fuse: облачная распределенная интеграция

    ANALYST MATERIAL 3 Ключевые возможности интеграции при модернизации

    Обучение

    Технический обзор гибкой интеграции Red Hat

    Получите больше подобных материалов

    Подпишитесь на нашу бесплатную рассылку Red Hat Shares.

    Продолжить

    SOAP vs REST API: что подходит именно вам?

    Вечный вопрос: в чем разница между SOAP и REST API и какой из них подходит для моего проекта?

    То, что нас зовут SoapUI, не означает, что мы также не знаем, о чем говорим, когда речь идет об объяснении веб-сервисов RESTful и API.

    Итак, если вы ищете ресурс, который даст вам ответ на этот извечный вопрос, вы попали по адресу. Мы также рассмотрим пример кода, а также вызовы и критические анализы каждого варианта.

    Мы предлагаем начать с видео в качестве введения в эту тему или для тех, кто только учится визуально.

    Начните здесь:

    SOAP vs REST

    Термин веб-API обычно относится к обеим сторонам компьютерных систем, взаимодействующих по сети: к службам API, предлагаемым сервером, а также к API, предлагаемому клиентом. например веб-браузер.

    Серверная часть веб-API представляет собой программный интерфейс к определенной системе сообщений типа запрос-ответ и обычно называется веб-службой. Существует несколько моделей проектирования веб-сервисов, но наиболее распространены две из них — SOAP и REST.

    SOAP предоставляет следующие преимущества по сравнению с REST:

    • Независимость от языка, платформы и транспорта (REST требует использования HTTP)     
    • Хорошо работает в распределенных корпоративных средах (REST предполагает прямую связь «точка-точка»)
    • Стандартизированный
    • Обеспечивает значительную расширяемость перед сборкой в ​​форме стандартов WS*
    • Встроенная обработка ошибок
    • Автоматизация при использовании с некоторыми языковыми продуктами

    REST проще в использовании и более гибок. Он имеет следующие преимущества по сравнению с SOAP:

    • Использует простые для понимания стандарты, такие как swagger и Спецификация OpenAPI 3. 0
    • Меньшая кривая обучения
    • Эффективно (SOAP использует XML для всех сообщений, REST в основном использует меньшие форматы сообщений, такие как JSON)
    • Быстро (не требует обширной обработки)
    • Ближе к другим веб-технологиям в философии дизайна

    Как сказано в одном учебнике по REST API: SOAP подобен конверту, а REST — просто открытке.

    Конечно, открытку отправить быстрее и дешевле, чем конверт, но ее все равно можно завернуть во что-нибудь другое, даже в конверт.

    Вы также можете просто прочитать открытку, в то время как конверт требует нескольких дополнительных действий, таких как открытие или разворачивание, чтобы получить доступ к тому, что внутри.

    Это всего лишь версия TLDR. Продолжайте читать ниже, чтобы получить более подробную информацию об этих двух форматах. Или ознакомьтесь с инфографикой SOAP vs REST, если вам это больше нравится.

    SOAP

    SOAP — простой протокол доступа к объектам — вероятно, наиболее известная из двух моделей.

    SOAP в значительной степени опирается на XML и вместе со схемами определяет структуру обмена сообщениями со строгой типизацией.

    Каждая операция, предоставляемая службой, явно определена вместе со структурой XML запроса и ответа для этой операции.

    Каждый входной параметр определяется аналогичным образом и привязывается к типу: например, целое число, строка или какой-либо другой сложный объект.

    Все это закодировано в WSDL — языке описания веб-сервиса (или определения в более поздних версиях). WSDL часто называют контрактом между поставщиком и потребителем службы. С точки зрения программирования WSDL можно рассматривать как сигнатуру метода для веб-службы.

    Отслеживание производительности тестирования по мере масштабирования тестирования API

    Сравните: все функции SoapUI Pro

    SoapUI с открытым исходным кодом

    • Поддержка тестирования SOAP и REST API.
    • Простое переключение между несколькими средами.
    • Подробная история тестов и отчеты о сравнении тестов.

    SoapUI Pro

    • Поддержка тестирования API SOAP, REST и GraphQL.
    • Простое переключение между несколькими средами.
    • Подробная история тестов и отчеты о сравнении тестов.

    Попробуйте SoapUI Pro

    Пример:

    Пример обмена сообщениями выглядит следующим образом.

    Запрос от клиента:

    ОТПРАВКА http://www.stgregorioschurchdc.org/cgi/websvccal.cgi HTTP/1.1
    Accept-Encoding: gzip, deflate
    Тип содержимого: текст/xml; кодировка = UTF-8
    SOAPAction: "http://www.stgregorioschurchdc.org/Calendar#easter_date"
    Длина контента: 479
    Хост: www.stgregorioschurchdc.org
    Соединение: Keep-Alive
    Пользовательский агент: Apache-HttpClient/4.1.1 (java 1.5)
    
     org/Calendar">
    
    <мыло:тело>
    
    <год xsi:type="xsd:short">2014
    
    
     

    Ответ службы:

    HTTP/1.1 200 ОК
    Дата: пятница, 22 ноября 2013 г., 21:09:44 по Гринвичу
    Сервер: Apache/2.0.52 (Red Hat)
    SOAP-сервер: SOAP::Lite/Perl/0.52
    Длина содержимого: 566
    Подключение: близко
    Тип содержимого: текст/xml; кодировка = utf-8
    
    
    
    
    20 апреля 2014 г. 
    
    
     

    Из этого примера видно, что сообщение было отправлено через HTTP. SOAP на самом деле не зависит от основного транспортного протокола и может быть отправлен практически по любому протоколу, такому как HTTP, SMTP, TCP или JMS.

    Как уже упоминалось, само сообщение SOAP должно быть в формате XML. Как обычно для любого XML-документа, должен быть один корневой элемент: в данном случае Envelope.

    Содержит два обязательных элемента: заголовок и тело. Остальные элементы этого сообщения описываются WSDL.

    Прилагаемый WSDL, определяющий указанный выше сервис, выглядит следующим образом (детали не важны, но для полноты картины здесь показан весь документ):

    
    <определения xmlns:tns="http://www.stgregorioschurchdc.org/Calendar"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://schemas.xmlsoap. org/wsdl/"
    name="Календарь" targetNamespace="http://www.stgregorioschurchdc.org/Calendar">
    <имя сообщения="Дата Пасхи">
    
    
    
    
    
    
    <имя_операции="easter_date" параметрOrder="год">
    
    
    
    
    
    
    <имя_операции="easter_date">
    
    <ввод>
    
    
    <выход>
    
    
    
    
    <имя службы="Календарь">
    
     stgregorioschurchdc.org/cgi/websvccal.cgi"/>
    
    
     

    Обратите внимание, что в этом документе описаны все части тела сообщения. Также обратите внимание, что, хотя этот документ предназначен в первую очередь для чтения на компьютере, человеку с некоторыми знаниями в области программирования все равно будет относительно легко следовать.

    Попробуйте пример проекта SOAP в SoapUI

    WSDL

    WSDL определяет каждый аспект сообщения SOAP. Он даже может определить, может ли какой-либо элемент или атрибут появляться несколько раз, является ли он обязательным или необязательным, и даже может указать определенный порядок, в котором элементы должны появляться.

    Существует распространенное заблуждение, что WSDL является обязательным требованием для службы SOAP.

    SOAP был разработан до WSDL, поэтому WSDL является необязательным. Хотя значительно сложнее взаимодействовать с веб-службой, не имеющей WSDL.

    С другой стороны, если разработчика просят взаимодействовать с существующей веб-службой SOAP, ему нужно только предоставить WSDL, и существуют инструменты, которые выполняют обнаружение служб — генерируют заглушки методов с соответствующими параметрами практически на любом языке из что WSDL.

    Многие имеющиеся на рынке инструменты тестирования работают одинаково — тестер предоставляет URL-адрес WSDL, и инструменты генерируют все вызовы с образцами параметров для всех доступных методов.

    Критика SOAP

    Хотя на первый взгляд WSDL может показаться отличной вещью — он самодокументируемый и содержит почти полную картину всего, что требуется для интеграции со службой, — он также может стать обузой.

    Помните, что WSDL — это договор между вами (поставщиком услуги) и каждым из ваших клиентов (потребителей услуги).

    Изменения WSDL также означают изменения клиента.

    Если вы хотите внести изменения в свой API, даже такие незначительные, как добавление необязательного параметра, WSDL должен измениться. И изменения WSDL также означают изменения клиентов — все ваши потребители должны перекомпилировать свои клиентские приложения для этого нового WSDL.

    Это небольшое изменение значительно увеличивает нагрузку на группы разработчиков (по обе стороны коммуникации), а также на группы тестирования. По этой причине WSDL рассматривается как привязка к версии, и большинство провайдеров очень сопротивляются обновлению своего API.

    Кроме того, хотя SOAP предлагает некоторую интересную гибкость, такую ​​как возможность передачи по любому транспортному протоколу, никто на самом деле не воспользовался большинством из них.

    Благодаря развитию Интернета все, что имеет значение, работает через HTTP.

    Есть новые достижения, но большинству из них препятствуют инфраструктурные маршрутизаторы, отказывающиеся маршрутизировать нестандартный HTTP-трафик. Только подумайте: как давно мир пытается перейти на IPv6?

    Определенно нужна более легкая и гибкая модель [чем SOAP].

    В любой ситуации, когда размер передаваемого сообщения не имеет значения или когда вы полностью контролируете все, SOAP почти всегда является лучшим решением.

    Это относится в первую очередь к прямому обмену данными между серверами, обычно используемому для внутреннего обмена данными только в рамках одной компании.

    Тем не менее, существует потребность в мире, в котором почти у каждого человека на планете есть несколько устройств с малым объемом памяти и малой вычислительной мощностью, постоянно подключенных к нескольким службам, определенно существует потребность в более легкой и гибкой модели. .

    REST

    REST — передача репрезентативного состояния — быстро становится предпочтительной моделью проектирования общедоступных API (вы можете узнать гораздо больше о REST и о том, как тестировать эти API, в этой электронной книге REST 101: Руководство для начинающих по использованию и тестированию RESTful API). ).

    REST означает передачу репрезентативного состояния. Это стиль архитектуры программного обеспечения, основанный на протоколе связи без сохранения состояния, чаще всего HTTP. REST структурирует данные в XML, YAML или любом другом формате, который может быть прочитан машиной, но обычно наиболее широко используется JSON. REST следует парадигме объектно-ориентированного программирования существительного-глагола. REST в значительной степени зависит от данных, по сравнению с SOAP, который сильно зависит от функций. Вы можете видеть, что люди называют их API RESTful или веб-сервисами RESTful. Они означают одно и то же и могут быть взаимозаменяемы.

    Не существует стандарта для формата описания служб REST (вы можете импортировать службу REST в SoapUI с помощью файлов WADL). ReadyAPI поддерживает форматы OpenAPI, Swagger и RAML.

    Ваши основные HTTP-запросы REST: POST, GET, PUT и DELETE. SoapUI также поддерживает запросы HEAD, OPTIONS, TRACE и PATCH. Давайте рассмотрим пример из Swagger Pet Store API:

    • Отправка запроса GET на /pet/{petId} приведет к получению питомцев с указанным идентификатором из базы данных.
    • Отправка запроса POST в /pet/{petId}/uploadImage добавит новое изображение питомца.
    • Отправка запроса PUT на /pet/{petId} приведет к обновлению атрибутов существующего питомца, идентифицированного указанным идентификатором.
    • Отправка запроса DELETE на /pet/{petId} приведет к удалению указанного питомца.

    Итак, вкратце вот что соответствует каждому из этих типов запросов:

    ПОЛУЧИТЬ

    Чтение или получение данных

    ПОЧТ

    Добавить новые данные

    ПУТ

    Обновить уже существующие данные

    УДАЛИТЬ

    Удалить данные

    Чтобы узнать больше о запросах REST и о том, как их выполнять в SoapUI, посетите нашу страницу Работа с запросами REST .

    Пример:

    Пример обмена сообщениями может содержать всего лишь это — 

    Запрос:

    ПОЛУЧИТЬ http://www.catechizeme.com/catechisms/catechism_for_young_children/daily_question.js HTTP/1.1
    Accept-Encoding: gzip, deflate
    Хост: www. catechizeme.com
    Соединение: Keep-Alive
    Агент пользователя: Apache-HttpClient/4.1.1 (java 1.5) 

    Ответ:

    HTTP/1.1 200 ОК
    Дата: пятница, 22 ноября 2013 г., 22:32:22 по Гринвичу
    Сервер: Апач
    X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.17
    ETag: "b8a7ef8b4b282a70d1b64ea5e79072df"
    X-время выполнения: 13
    Cache-Control: закрытый, max-age=0, обязателен к повторной проверке
    Длина контента: 209
    Статус: 200
    Keep-Alive: таймаут=2, макс=100
    Соединение: Keep-Alive
    Тип содержимого: js; кодировка = utf-8
    {
    "link": "катехизисы\/катехизисы_для_молодых_детей\/вопросы\/36",
    "Катехизис": "Катехизис для детей раннего возраста",
    "a": "Первородный грех.",
    "позиция": 36,
    «q»: «Как называется та греховная природа, которую мы наследуем от Адама?»
    } 

    Как и ожидалось, это сообщение было отправлено через HTTP и использовало команду GET.

    Далее обратите внимание, что URI, который также должен был быть включен в SOAP-запрос, но там он не имел значения, здесь действительно обретает значение. Тело сообщения значительно меньше, в этом примере его фактически нет.

    Служба REST также имеет схему на так называемом WADL — языке описания веб-приложений. WADL для вышеупомянутого вызова будет выглядеть так:

    
    <приложение xmlns="http://wadl.dev.java.net/2009/02">
    
    <база ресурсов="http://www.catechizeme.com">
    
    
    
    <имя метода="ПОЛУЧИТЬ">
    
    <запрос/>
    <статус ответа="200">
    <представление mediaType="json" element="data"/>
    <представление mediaType="js; charset=utf-8" element="data"/>
    
    
    
    
     

    WADL использует синтаксис XML для описания метаданных и доступных действий. Его также можно написать таким же строгим, как WSDL: определение типов, необязательных параметров и т. д.

    Попробуйте пример проекта REST в SoapUI

    WADL

    WADL не имеет механизма для представления самих данных, т.е. что должно быть отправлено по URI. Это означает, что WADL может документировать только около половины информации, необходимой для взаимодействия со службой.

    Возьмем, к примеру, параметр CATECHISM_NAME в примере выше. WADL только сообщает вам, где в URI находится параметр, и что это должна быть строка.

    Однако, если бы вам нужно было подобрать правильные значения для себя, это, вероятно, заняло бы у вас довольно много времени. Обратите внимание, что в WADL можно добавить схему, чтобы можно было определять даже сложные типы переменных, такие как перечисления; однако это еще реже, чем предоставление WADL.

    WADL не является обязательным.

    Кроме того, WADL является необязательным; на самом деле WADL вообще поставляется довольно редко! Из-за характера службы, чтобы ее можно было использовать, вам почти наверняка понадобится дополнительная документация.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *