Чем отличаются подходы REST и RPC при проектировании API

Ответ

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

REST (Representational State Transfer) — это архитектурный стиль, а не протокол. Он ориентирован на ресурсы (сущности, например, пользователь или продукт). Взаимодействие с ресурсами происходит с помощью стандартного набора методов HTTP.

  • Парадигма: Работа с ресурсами.
  • Операции: Стандартные HTTP-методы (GET, POST, PUT, DELETE).
  • Пример: GET /users/123 — получить данные пользователя с ID 123.

RPC (Remote Procedure Call) — это парадигма, где клиент вызывает функции или процедуры на удаленном сервере, как если бы они были локальными.

  • Парадигма: Вызов удаленных действий.
  • Операции: Произвольные имена функций (getUser, calculateBill, sendEmail).
  • Пример: Вызов функции users.getUser({id: 123}).

Ключевые различия

Критерий REST RPC
Основная идея Манипуляция ресурсами Вызов удаленных функций
Контракт API Стандартные HTTP-методы Уникальные имена процедур
Кеширование Легко кешируется на уровне HTTP Сложно, т.к. часто используется POST
Формат данных Чаще всего JSON, XML Любой, включая бинарные (Protobuf в gRPC)

Когда что выбрать?

  • REST: Идеален для публичных API и CRUD-операций (создание, чтение, обновление, удаление), где важна стандартизация, кеширование и слабая связанность.
  • RPC (особенно gRPC): Отлично подходит для высокопроизводительных внутренних коммуникаций между микросервисами, где требуется выполнение сложных, нересурсных операций.

Ответ 18+ 🔞

Да ты посмотри, какая дичь, блядь! Два подхода, а будто с разных планет свалились, ёпта!

REST — это типа как архитектурный стиль, понимаешь? Не протокол, нет! Тут вся философия завязана на ресурсах. Представь себе пользователя или товар — вот это и есть ресурс. И ты с ним общаешься через стандартные, прилизанные HTTP-команды.

  • Суть: Возись с ресурсами, как с картошкой на кухне.
  • Что делаешь: GET (посмотри), POST (создай), PUT (измени), DELETE (удали нахуй).
  • Пример: GET /users/123 — дай-ка сюда данные этого чувака под номером 123. Всё чинно, благородно.

А теперь RPC — это вообще другая опера, блядь! Тут ты просто вызываешь функции на удалённой машине, будто она у тебя под боком сидит. Никаких тебе ресурсов — чистое действие!

  • Суть: Крикнул в трубку название процедуры — получил результат.
  • Что делаешь: Любые имена функций, какие в голову взбредут: getUser, calculateBill, sendSpam.
  • Пример: Вызвал users.getUser({id: 123}) и ждёшь, что тебе в ответ плюнут данные.

А в чём, собственно, разница-то, блядь?

Критерий REST RPC
Идея фикс Ковыряемся в ресурсах Дёргаем удалённые функции
Договорённость Стандартные HTTP-глаголы Уникальные имена, хоть позвать_лошадь
Кеширование Охуенно просто, HTTP же Хуёво, потому что вечно POST летит
Формат данных В основном JSON, XML Да любой, хоть бинарник (как в gRPC)

Так когда что брать, чтобы не обосраться?

  • REST: Бери, когда делаешь публичное API для всех распиздяев, или для простых CRUD-операций (создал-прочитал-обновил-удалил). Тут важны стандарты, кеш и чтобы всё было не слишком связано.
  • RPC (особенно gRPC): Вот это да, блядь! Бери, когда у тебя микросервисы друг с другом треплются внутри системы и надо, чтобы летало быстро, как угорелое. Идеально для сложной логики, которая в рамки «ресурса» не лезет.