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

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

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

GET /getLastUser

или это:

POST /changeUserName

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

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

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

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

GET /addTwo?num=5

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

{
    "result": 7
}

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

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


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


Ответы (1)


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

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

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

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

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

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

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

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

person Evert    schedule 10.09.2017
comment
Итак, REST не обязательно противоречит RPC? - person ; 11.09.2017
comment
@ user3134477, не обязательно, но это верно при очень специфических условиях. Когда большинство читает REST, они думают о типичной реализации REST на HTTP. Для большинства практических целей это две совершенно разные вещи, но когда вы переходите к теории, REST можно выполнять поверх протокола RPC. - person Evert; 11.09.2017