- Введение в REST API

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

Что такое REST?

REST расшифровывается как REpresentational State Transfer. Этот термин первоначально введен Роем Филдингом (Roy Fielding), который также был одним из создателей протокола HTTP. Отличительной особенностью сервисов REST является то, что они позволяют наилучшим образом использовать протокол HTTP. Теперь давайте кратко рассмотрим HTTP.

Протокол HTTP

Когда вы вводите в браузере URL-адрес, например www.google.com, на сервер отправляется запрос на веб-сайт, идентифицированный URL-адресом. Затем этот сервер формирует и выдает ответ. Важным является формат этих запросов и ответов. Эти форматы определяются протоколом HTTP - Hyper Text Transfer Protocol.

Когда вы набираете URL в браузере, он отправляет запрос GET на указанный сервер. Затем сервер отвечает HTTP-ответом, который содержит данные в формате HTML - Hyper Text Markup Language. Затем браузер получает этот HTML-код и отображает его на экране.

Допустим, вы заполняете форму, присутствующую на веб-странице, со списком элементов. В таком случае, когда вы нажимаете кнопку Submit, HTTP-запрос POST отправляется на сервер.

HTTP и RESTful веб-сервисы

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

Ресурс

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

  • Конкретный пользователь
  • Конкретная задача
  • Список задач

URI ресурса

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

  • Создать пользователя: POST /users
  • Удалить пользователя: DELETE /users/1
  • Получить всех пользователей: GET /users
  • Получить одного пользователя: GET /users/1

REST и Ресурсы

Важно отметить, что с REST вам нужно думать о приложении с точки зрения ресурсов:

  • Определите, какие ресурсы вы хотите открыть для внешнего мира;
  • Используйте глаголы, уже определенные протоколом HTTP, для выполнения операций с этими ресурсами.

Вот как обычно реализуется служба REST:

  • Формат обмена данными: здесь нет никаких ограничений. JSON - очень популярный формат, хотя можно использовать и другие, такие как XML;
  • Транспорт: всегда HTTP. REST полностью построен на основе HTTP;
  • Определение сервиса: не существует стандарта для этого, а REST является гибким. Это может быть недостатком в некоторых сценариях, поскольку потребляющему приложению может быть необходимо понимать форматы запросов и ответов. Однако широко используются такие языки определения веб-приложений, как WADL (Web Application Definition Language) и Swagger.

REST фокусируется на ресурсах и на том, насколько эффективно вы выполняете операции с ними, используя HTTP.

Компоненты HTTP

HTTP определяет следующую структуру запроса (request):

  • строка запроса (request line) - определяет тип сообщения;
  • заголовки запроса (header fields) - характеризуют тело сообщения, параметры передачи и прочие сведения;
  • тело сообщения (body) - необязательное.

HTTP определяет следующую структуру ответного сообщения (response):

  • строка состояния (status line), включающая код состояния и сообщение о причине;
  • поля заголовка ответа (header fields);
  • дополнительное тело сообщения (body).

Методы HTTP-запроса

Метод, используемый в HTTP-запросе, указывает, какое действие вы хотите выполнить с этим запросом. Важные примеры:

  • GET: получить подробную информацию о ресурсе;
  • POST: создать новый ресурс;
  • PUT: обновить существующий ресурс;
  • DELETE: Удалить ресурс.

Код статуса ответа HTTP

Код состояния всегда присутствует в ответе HTTP. Типичные примеры:

  • 200 - успех;
  • 404 - cтраница не найдена.

Различия REST и SOAP

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

REST и SOAP

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

  • Пример реализации 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 возникают большие накладные расходы.