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



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



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



REST – это архитектурный стиль, который всего лишь определяет набор принципов и ограничений. 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 и имеет стандарт. В отличие от REST, SOAP активно использует разные транспортные протоколы помимо HTTP, например, SMTP и FTP. А ещё SOAP не может использовать другой формат представления данных, кроме XML. Применяется в системах, где нужна жёсткая стандартизация, а также в legacy.



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



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



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



💬 Вы можете писать свои вопросы в комментариях, мы дополним пост.



📎 Материалы по теме

1. HTTP. Что нужно знать аналитику

2. Как выбрать тип межсистемной интеграции

3. WebSocket: что это, когда следует использовать и какие преимущества дает



#api #интеграции