Bezdepbonusu7Программирование: статьи и ответы

Вопрос

REST против RPC - *фактическая цель* различия

Автор вопроса: CommunityОтветов: 1

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

При поиске простого объяснения разницы между ними я начал понимать, но некоторые примеры сбивали меня с толку.
Я видел такие вещи:

GET /getLastUser

или это:

POST /changeUserName

Если REST предназначен для ресурсов, а RPC - для процедур, не является ли плохой практикой использование RPC для чего-то подобного?

Поправьте меня, если я ошибаюсь, но, как мне кажется, RPC должен быть более чисто функциональным.
Это означает, что вызов процедуры всегда должен:

  • возвращать тот же результат для тех же аргументов
  • не влияет на состояние

Итак, вызовы RPC выглядят так:

GET /addTwo?num=5

которые возвращают что-то вроде этого:

{
    "result": 7
}

кажутся мне более логичными (хотя это очень простой пример).

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

  • Это довольно хорошо объясняет stackoverflow. ком/вопросы/26830431/ twoleggedhorse 10.09.2017
  • Как и этот sites.google.com. /site/wagingguerillasoftware/rest-series/ twoleggedhorse 10.09.2017

restrpc

Ответы

Ответ 1 · рейтинг 3 · Evert

RPC не предназначен для работы. Вызов одной и той же процедуры дважды не дает гарантии результата.

На этот вопрос можно ответить несколькими разными способами, и довольно глубоко. Я думаю, что это может быть справедливым резюме.

  • В RPC примитивами обычно являются имена функций, аргументы и результаты.
  • В REST примитивом является "представление ресурса".

Так что там, где с RPC вы можете вызвать функцию, в REST вы действительно отправляете и получаете состояние ресурса, независимо от протокола.

Это означает, что вы обычно спрашиваете сервер только "можете ли вы дать мне состояние этого ресурса" или вы говорите серверу "вот новое состояние ресурса, пожалуйста, сохраните его в этом месте". Единственные успешные ответы, которые даст REST, - это "текущее состояние" или "эта операция сработала", но с RPC вопрос (функция + аргументы) и ответ (результат) могут быть любыми.

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

REST - это не только передача состояния. Использование гиперссылок - еще одно важное требование для того, чтобы служба называлась REST, и это также то, что вы не получаете "из коробки" с RPC.

Наконец, можно утверждать, что HTTP сам по себе является протоколом, подобным RPC. Я думаю, что можно создать службу RESTful поверх любой службы RPC.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы