Различия в веб-сервисе между REST и RPC

У меня есть веб-сервис, который принимает параметры JSON, и имейте определенные URL для методов, например:

http://IP:PORT/API/getAllData?p={JSON}

Это - определенно не REST, поскольку это не является не сохраняющим состояние. Это принимает cookie во внимание и имеет его собственную сессию.

Это - RPC? Каково различие между RPC и REST?

59
задан 9 November 2014 в 20:51

3 ответа

Как другие сказали, основное отличие - то, что REST централен существительным, и RPC централен глаголом. Я просто хотел включать этот ясная таблица примеров демонстрация что:

---------------------------+-------------------------------------+--------------------------
 Operation                 | RPC (operation)                     | REST (resource)
---------------------------+-------------------------------------+--------------------------
 Signup                    | POST /signup                        | POST /persons           
---------------------------+-------------------------------------+--------------------------
 Resign                    | POST /resign                        | DELETE /persons/1234    
---------------------------+-------------------------------------+--------------------------
 Read person               | GET /readPerson?personid=1234       | GET /persons/1234       
---------------------------+-------------------------------------+--------------------------
 Read person's items list  | GET /readUsersItemsList?userid=1234 | GET /persons/1234/items 
---------------------------+-------------------------------------+--------------------------
 Add item to person's list | POST /addItemToUsersItemsList       | POST /persons/1234/items
---------------------------+-------------------------------------+--------------------------
 Update item               | POST /modifyItem                    | PUT /items/456          
---------------------------+-------------------------------------+--------------------------
 Delete item               | POST /removeItem?itemId=456         | DELETE /items/456       
---------------------------+-------------------------------------+--------------------------

Примечания

  • Как таблица показывают, REST имеет тенденцию использовать параметры пути URL для идентификации определенных ресурсов
    (например, GET /persons/1234), тогда как RPC имеет тенденцию использовать параметры запроса для входных параметров функции
    (например, GET /readPerson?personid=1234).
  • Не показанный в таблице то, как API REST обработал бы фильтрацию, которая будет обычно включать параметры запроса (например, GET /persons?height=tall).
  • Также не показанный то, как или с системой, когда Вы действительно создаете/обновляете операции, дополнительные данные, вероятно, передаются на пути тело сообщения (например, когда Вы делаете POST /signup или POST /persons, Вы включаете данные, описывающие нового человека).
  • , Конечно, ни одно из этого не установлено в камне, но он дает Вам общее представление о том, с чем Вы, вероятно, встретитесь и как Вы могли бы хотеть организовать свой собственный API для непротиворечивости. Для дальнейшего обсуждения дизайна URL REST см. этот вопрос .
19
ответ дан 1 November 2019 в 11:29

Это - то, как я понимаю и использую их в различных вариантах использования:

Пример: управление Ресторана

пример использования для REST: управление порядком

- create order (POST), update order (PATCH), cancel order (DELETE), retrieve order (GET)
- endpoint: /order?orderId=123

Для управления ресурсами, REST является чистым. Одна конечная точка с предопределенными действиями. Это видно способ выставить DB (Sql или NoSql) или экземпляры класса к миру.

Пример Реализации:

class order:
    on_get(self, req, resp): doThis.
    on_patch(self, req, resp): doThat.

Пример Платформы: Сокол для Python.

пример использования для RPC: операционное управление

- prepare ingredients: /operation/clean/kitchen
- cook the order: /operation/cook/123
- serve the order /operation/serve/123

Для аналитических, операционных, небыстро реагирующих, непредставительных, основанных на действии заданий, RPC работает лучше, и очень естественно думать функциональное.

Пример Реализации:

@route('/operation/cook/<orderId>')
def cook(orderId): doThis.

@route('/operation/serve/<orderId>')
def serve(orderId): doThat.

Пример Платформы: Фляга для python

1
ответ дан 1 November 2019 в 11:29

По HTTP они оба заканчивают тем, что были всего HttpRequest объекты, и они оба ожидают HttpResponse объект назад. Я думаю, что можно продолжить кодировать с тем описанием и беспокойством о чем-то еще.

0
ответ дан 1 November 2019 в 11:29

Другие вопросы по тегам:

Похожие вопросы: