24/06/2022

REST и SOAP

REST и SOAP

API

API - это контракт, который предоставляет программа: какие операции можно выполнять.

API включает:

  • операции которые можно проводить
  • данные которые подаются на вход
  • данные которые предоставляются на выходе

API - набор функций.

API входа, API отчетности, API платежек и тд или одно общее API.

На каждое API есть контракт который говорит какие функции можно выполнять.

Для SOAP таким контрактом является wsdl, для REST - wadl.

Описание функций которые мы можем использовать. Одни и теже функции можно использовать в разных API.

Вызвать API можно напрямую или косвенно.

Напрямую:

  • система вызывает функции внутри себя;
  • одна система вызывает метод другой системы;
  • в автотестах;

Косвенно:

  • пользователь работает с GUI;

Тестирование (через) API

Когда одна система общается с другой по протоколу(HTTP, GMS) передачи данных - это называется remote API(общение по сети). Есть еще shared memory API - это когда программа общается в одной виртуальной памяти

SOAP Передает сообщение в xml формате. WSDL - это список всех методов которые нам доступны через SOAP.

REST и SOAP

REST и SOAP на самом деле не сопоставимы. REST — это архитектурный стиль. SOAP — это формат обмена сообщениями. Давайте сравним популярные реализации стилей REST и SOAP.

REST означает REpresentational State Transfer (Википедия: «передача состояния представления»). Это популярный архитектурный подход для создания API в современном мире.

Пример реализации RESTful: JSON через HTTP;
Пример реализации SOAP: XML поверх SOAP через HTTP;

На верхнем уровне SOAP ограничивает структуры ваших сообщений, тогда как REST — это архитектурный подход, ориентированный на использование HTTP в качестве транспортного протокола.

Специфика SOAP — это формат обмена данными. С SOAP это всегда SOAP-XML, который представляет собой XML, включающий:

  • Envelope (конверт) – корневой элемент, который определяет сообщение и пространство имен, использованное в документе,
  • Header (заголовок) – содержит атрибуты сообщения, например: информация о безопасности или о сетевой маршрутизации,
  • Body (тело) – содержит сообщение, которым обмениваются приложения,
  • Fault – необязательный элемент, который предоставляет информацию об ошибках, которые произошли при обработке сообщений. И запрос, и ответ должны соответствовать структуре SOAP.

Специфика REST — использование HTTP в качестве транспортного протокола. Он подразумевает наилучшее использование функций, предоставляемых HTTP - методы запросов, заголовки запросов, ответы, заголовки ответов и т. д.

Формат обмена сообщениями

В SOAP вы используете формат SOAP XML для запросов и ответов. В REST такого фиксированного формата нет. Вы можете обмениваться сообщениями на основе XML, JSON или любого другого удобного формата. JSON является самым популярным среди используемых форматов.

Определения услуг

SOAP использует WSDL (Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML. REST не имеет стандартного языка определения сервиса. Несмотря на то, что WADL был одним из первых предложенных стандартов, он не очень популярен. Более популярно использование Swagger или Open API.

Транспорт

SOAP не накладывает никаких ограничений на тип транспортного протокола. Вы можете использовать либо Web протокол HTTP, либо MQ.

REST подразумевает наилучшее использование транспортного протокола HTTP

Простота реализации

RESTFful веб-сервисы, как правило, гораздо проще реализовать, чем веб-сервисы на основе SOAP.

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

Типы запросов

Метод GET

Метод GET - используется для получения информации о ресурсе.

Метод POST

Метод POST предназначен для создания новых ресурсов и передачи данных.

Метод PUT

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

Метод PUT обновляет ресурс полностью, в то время как метод PATCH вносит частичные изменения в существующем ресурсе, затрагивая только указанные поля, переданные в теле запроса.

Метод PUT является идемпотентным. Это означает, что если мы отправим один и тот же запрос PUT десять раз, результат будет одинаковым. При первом вызове PUT внесет изменение в базу данных, а последующие вызовы будут заменять тот же объект теми же данными.

Метод PATCH

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

Метод DELETE

Если нам необходимо удалить неправильно сформированный заказ в интернет-магазине, пользователя в социальной сети или фотографию в Instagram, мы используем метод DELETE. Метод DELETE может иметь тело запроса, но также может и не иметь, но как правило, тело запроса в методе DELETE не используется.

Пример DELETE запроса, на удаление пользователя с id=123:

DELETE /users/123 HTTP/1.1 Host: example.com После успешного выполнения метода DELETE мы можем получить различные статус-коды и тела ответа от сервера:

  • 200 OK указывает на успешное выполнение удаления, и ответ содержит тело.
  • 202 Accepted используется, если удаление будет успешным, но еще не завершено.
  • 204 No Content означает, что удаление было выполнено, но тело ответа отсутствует.
  • 401 Unauthorized возникает, если попытка удаления выполняется без авторизации.
  • 403 Forbidden указывает на отсутствие прав на выполнение данной операции.
  • 404 Not Found возникает, если попытка удаления направлена на несуществующий или ненайденный ресурс. Как и метод PUT, метод DELETE не поддерживает кэширование.

Метод HEAD

Данный метод по своей сути похож на GET, но сервер отвечает на запрос одним лишь заголовком(без тела). (Отсюда и название метода.) Применяется, например, чтобы узнать, существует ли в сети тот или иной URL и не произошло ли каких-нибудь изменений.

Метод OPTIONS

OPTIONS - служит для получения параметров для ресурса или для сервера в целом и при этом сам ресурс ни как не затрагивается (то есть это более дешевая операция по сравнению с HEAD) OPTIONS возвращает параметры в заголовке. Список параметров зависит о ресурса и/или сервера. Обычно это заголовок Allow, который описывает какие методы доступны для ресурса. Этот метод позволяет клиенту определять опции и/или требования, связанные с ресурсом, или возможностями сервера, но не производя никаких действий над ресурсом и не инициируя его загрузку.

Идемпотентность

Идемпотентные методы - это методы, которые либо не изменяют состояние в базе данных, либо изменяют состояние только при первом запросе. В случае повторной отправки идентичного запроса, состояние в базе данных не изменяется. Идемпотентными методами являются: GET, PUT, DELETE, HEAD и OPTIONS.