Перейти к основному содержимому

Ликбез по понятиям: REST, API, HTTP

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

API (Application Programming Interface) – это набор ручек (методов), с помощью которых мы можем делать определённые действия с внешней системой. Система для нас чёрный ящик, мы знаем только, какие методы мы можем вызвать, по каким форматам передавать запросы и какие мы получим в результате. То есть, грубо говоря, API отвечает на вопрос “что”.

REST (REpresentational State Transfer) – это архитектурный стиль, который всего лишь определяет набор принципов и ограничений. REST отвечает на вопрос как спроектировать API. Не все API – это REST, но всегда REST имеет дело с API.

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

HTTP – это протокол, который описывает, как происходит обмен данными по сети. HTTP определяет структуру запросов и ответов, набор допустимых методов, форматов сообщений, заголовков и так далее.

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

Может ли REST не использовать HTTP?

Да, может, но зачем? С одной стороны, REST не говорит, что нужно обязательно использовать HTTP. С другой стороны, HTTP специально спроектирован под REST. Более того, создатель REST и HTTP – это один и тот же человек, Рэй Филдинг.

Можно ли использовать HTTP без REST?

Можно, но зачем? Допустим, у нас есть CMS-система, которая предоставляет API для управления статьями. Если мы хотим удалить определённый объект, мы можем вызвать, например, такой метод: POST /delete_article, а в теле запроса передать id=1. Мы вызвали HTTP-метод POST, однако такой API не соответствует парадигме REST, то есть не является RESTful API. И вот почему.

Во-первых, он нарушает принцип единообразного интерфейса, так как не идентифицирует ресурс по его URI, а передает его идентификатор в теле запроса.

Во-вторых, он нарушает принцип манипуляции ресурсами через представления, так как не использует подходящий HTTP-метод для удаления ресурса.

В парадигме REST мы должны были сделать примерно так: DELETE /articles/1/.

REST предполагает только JSON?

В архитектурном стиле REST нет ограничений по формату сообщений. REST API могут поддерживать любой формат сообщений, например XML, JSON, RSS, CSV, HTML и другие.

Какие бывают API помимо REST?

  • SOAP – протокол, который работает на XML и имеет стандарт (https://www.w3.org/TR/soap). В отличие от REST, SOAP активно использует разные транспортные протоколы помимо HTTP, например, SMTP и FTP. А ещё SOAP не может использовать другой формат представления данных, кроме XML. Применяется в системах, где нужна жёсткая стандартизация, а также в legacy.

  • gRPC – это фреймворк для удалённого вызова процедур (RPC). Формат сообщений: бинарным Protocol Buffers, а протокол HTTP/2. Это позволяет преодолеть повысить производительность по сравнению с тяжеловесным SOAP и избыточной нагрузкой на сеть в REST. gRPC используется в высоконагруженных системах, где нужна высокая пропускная способность и производительность при низких требованиях к сети.

  • GraphQL – это язык запросов для API, который позволяет клиентам получать только те данные, которые им нужны. Вместо вызова нескольких ресурсов в REST, в GraphQL мы можем отправить только один запрос к одной конечной точке, указав какие данные и в какой структуре нам нужны. Он уменьшает избыточность запросов и нагрузку на сеть. В качестве транспортного протокола использует HTTP.

  • WebSocket — это протокол, который позволяет клиенту установить двухстороннюю («дуплексную») связь с сервером. Это означает, что он может одновременно и получать, и передавать информацию. Веб-сокет делает это множество раз в одном открытом соединении. В этом и заключается его основное преимущество по сравнению с традиционным HTTP, который является однонаправленным.

📄 Статьи по изучению REST

  1. REST, что же ты такое? — статья и вебинар от Systems Education
  2. Что такое REST API? — IBM
  3. Базовые понятия REST API
  4. Разработка web API — краткий перевод основных тезисов из брошюры «Web API Design. Crafting Interfaces that Developers Love» Брайана Маллоя
  5. Лучшие практики разработки REST API: 20 советов
  6. Как тестировать методы REST API
  7. REST в реальном мире и практика гипермедиа

▶️ Видео и вебинары по изучению REST

  1. REST, что же ты такое?! Понятное введение в технологию. Андрей Бураков
  2. Андрей Бураков. REST, почему ты такой? Скрытые смыслы популярной парадигмы.
  3. Серия коротких видео Всё о REST API
  4. Как аналитику спроектировать свой REST API // Демо-занятие курса «Специализация «Системный аналитик»
  5. Документация REST API / Артём Кузвесов (Ideco)

🎓 Курсы по изучению REST

  1. Бесплатный курс по документированию REST API

📖 Книги по изучению REST

  1. Арно Лоре. Проектирование веб-API
  2. Сергей Константинов. API
  3. REST in Practice: Hypermedia and Systems Architecture

➕ Другое

  1. Шаблон документации REST API
  2. Шаблон документации микросервисов от МТС
  3. HTTP. Что нужно знать аналитику
  4. Как выбрать тип межсистемной интеграции
  5. WebSocket: что это, когда следует использовать и какие преимущества дает