Статьи

Краткое введение в REST

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

Так долго RPC, Привет, ОТДЫХ

Если вы были в сетевой игре некоторое время, вы можете вспомнить, когда RPC захватил сеть около 10 лет назад. Я сам помню, что это была одна из самых захватывающих вещей своего времени. Несмотря на то, что модель существует с 80-х годов, она начала появляться в сети в начале 2000-х годов, и в то время RPC был отличным решением. На самом деле он все еще используется повсеместно.

RPC расшифровывается как Удаленный вызов процедур, и это способ выполнить метод в отдельном адресном пространстве, например на сервере, и при необходимости использовать вывод. Вот примерная диаграмма того, как это выглядит:

& quot; Введение в REST Services & quot;

Как вы можете видеть, веб-сервер по адресу www.yoursite.com отправляет и извлекает информацию с других серверов и использует эти данные для сборки веб-страницы. Вызовы RPC могут предоставлять услуги практически для всего: от протоколов обмена сообщениями до биржевых котировок, отчетов о погоде и т. Д. WordPress широко использует его для проверки связи с другими блогами и множеством служб связи.

XML RPC и SOAP

Как правило, есть два способа выполнения вызовов RPC, с XML и SOAP. У каждого есть свои преимущества, но когда я создавал много такого, я предпочитал методы XML-RPC, которые представляли собой вызов RPC серверу, который возвращал XML. Это очень просто и понятно, и не требует много церемоний.

Как работает XML-RPC

SOAP (Simple Object Access Protocol) также использует XML для обмена сообщениями, но предоставляет расширяемую и мощную систему обмена сообщениями. Требуется немного больше работы в обмен на более мощные функции.

Как работает SOAP-RPC

Ни одна из этих систем не была изначально плохой и не обеспечивала отличных решений для времени. Это все еще распространено во всем Интернете и преуспевает. В 2008 году Леонард Ричардсон представил модель, которая сегодня гораздо полезнее.

Если вам нужно более подробное объяснение, ознакомьтесь с этой  статьей Microsoft TechNet по RPC.

Основные принципы ОТДЫХА

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

  • Сделки с объектами (ресурсами), которые имеют идентификаторы
  • Связывает серверы вместе
  • Обеспечивает интерфейс между пробелами
  • Использует стандартные методы
  • без гражданства

Вот некоторые из основных вещей, которые делают услугу ОТЛИЧНОЙ по своей природе. Одним из важных принципов является то, что они должны быть объектами с идентификатором. Эти идентификаторы будут использоваться в URI для определения того, какой ресурс мы читаем или изменяем.

http://www.yoursite.com/api/products/1234

Далее мы рассмотрим модель для определения, является ли API «RESTful» и какому уровню он соответствует.

Модель зрелости REST

Ричардсон создал модель REST Maturity, которая определяет, является ли API «полностью RESTful». Большинство нет, и не обязательно должно быть. Но вот краткое изложение:

Уровень 0 — XML-RPC / SOAP

  • Один URI
  • Один метод HTTP

Уровень 0 — это очень базовая модель, в которой вы просто отправили RPI (удаленный вызов процедур) на веб-сайт, и он возвращает некоторые данные. Он может быть в формате XML, JSON или в любом формате с парами ключ-значение.

Уровень 1 — Добавить URI

  • Многие URI / ресурсы
  • Один метод HTTP

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

http://www.yoursite.com/api/products/1234

http://www.yoursite.com/api/customers/0037

Уровень 2 — Добавить HTTP

  • Многие URI / ресурсы
  • Использование HTTP-глаголов

На уровне 2 мы добавляем HTTP-глаголы: GET, POST, PUT, DELETE. Есть и другие, но эти четыре я опишу позже.

Уровень 3 — Добавить HATEOAS

  • Многие URI / ресурсы
  • Использование глаголов HTTP
  • гипермедиа

На этом уровне мы добавляем HATEOAS: гипертекст как двигатель состояния приложения. Это то, как мы отправляем объекты, а также некоторые инструкции в ответе, описывающие, что мы можем делать дальше. Например, он может вернуть что-то вроде этого:

<?xml version="1.0"?>
<account>
   <account_number>12345</account_number>
   <balance currency="usd">100.00</balance>
   <link rel="deposit" href="/account/12345/deposit" />
   <link rel="withdraw" href="/account/12345/withdraw" /> 
   <link rel="transfer" href="/account/12345/transfer" />
   <link rel="close" href="/account/12345/close" />
 </account>

(из Википедии)

Эти средства управления гипермедиа означают, что клиенту REST не нужно знать, как использовать службу, и вместо этого он может руководствоваться ответами. Это то, что считается «полностью RESTful» сервисом.

HTTP-глаголы

Глаголы HTTP — это стандартный интерфейс для связи через службу REST. Существует глагол «createobject», или «modifyobject», поэтому эти действия выполняются с помощью набора глаголов:

  • ПОЛУЧИТЬ
  • ПОСЛЕ
  • ПОЛОЖИТЬ
  • УДАЛИТЬ

Я постараюсь объяснить это как можно проще. Здесь мы работаем с «ресурсами», которые похожи на записи в SQL (или могут напрямую соотноситься с записями).

GET  — получает список ресурсов и не изменяет их. Эквивалент SQL SELECT

POST  — обычно используется для создания нового ресурса. Эквивалент SQL INSERT

PUT  — заменяет ресурс обновленной информацией. Эквивалентно SQL UPDATE

УДАЛИТЬ  — Удаляет ресурс. Эквивалент SQL DELETE

Все это делается через HTTP. Используется больше HTTP-глаголов, но я упоминаю их, поскольку они наиболее часто используются для REST. Фактически, некоторые инженеры используют только GET и POST для всех операций. Теоретически вы можете делать все с помощью GET, если вы перегружаете запросы в URI, но обычно рекомендуется использовать эти глаголы для ваших действий.

Все нуждается в удостоверении личности

Все эти ресурсы должны иметь идентификатор. Это особенно верно для PUT и DELETE, так как нам нужно знать, какие ресурсы нужно изменить за кулисами. Идентификатор обычно передается в URI:

http://www.yoursite.com/api/customers/0037

Если мы отправим PUT на этот URI, он обновит ресурс клиента с идентификатором 0037. Если мы отправим DELETE на этот URI, он удалит его.

Глаголы, которые должны быть идемпотентными

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

Часто при разработке интерфейсов REST я отправляю 200 (ОК) при удалении ресурса. Затем при последующих удалениях я отправлю 204 или 404, чтобы звонящий знал, что ресурс больше не присутствует. Однако я не делаю это с PUT. Даже если вызывающий отправит PUT с одной и той же информацией снова и снова, он получит один и тот же ответ, потому что я не собираюсь проверять, действительно ли представленные данные отличаются. Вместо этого я просто буду слепо обновлять ресурс любой отправленной информацией. Нас не волнует, действительно ли данные отличаются, и мы не хотим тратить их на проверку циклов, если только мы не проводим какую-либо форму аудита.

Пример REST API

Вот пример простого REST API, использующего информацию, о которой мы узнали выше. Мы хотим создать API для изменения информации о наших клиентах.

& quot; Введение в REST Services & quot;

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

Связь между конечными точками

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

XML:

Плюсы:

  • Обобщенная разметка, так что вы можете создавать несколько форматов и стилей для пользовательских целей.
  • Вы можете определить схему для пользовательских типов данных и выполнить проверку структуры.
  • может использовать XPATH для извлечения информации намного проще, чем JSON

Минусы:

  • Гораздо более многословно, чем JSON, больше данных передается и может быть медленнее

JSON

Плюсы:

  • Простая интеграция с JavaScript (который обычно используется для взаимодействия со службами REST)
  • Простой, понятный синтаксис
  • Меньше накладных расходов, меньших размеров и лучшей производительности

Минусы:

  • Менее мощный и гибкий, особенно с разными типами данных

Резюме

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

Одна и та же служба REST может обеспечить работу веб-страницы, мобильного приложения или всего, что вы можете себе представить. Вы можете легко синхронизировать веб-страницу и мобильное устройство (подумайте о Spotify). REST — это будущее Интернета и то, что вы должны использовать для своего следующего проекта, если вы еще этого не сделали.

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