2013-09-05 3 views
3

Я пытаюсь понять рамки и пределы API RESTful. Мой конкретный вопрос заключается в следующем: как я могу обрабатывать REST API, который предоставляет операции, а не ресурсы? Должен ли я отказаться от соблазна разоблачения операций и переосмыслить API для предоставления данных (ресурсов). Исходя из ООП, который чувствует себя вопиющим нарушением инкапсуляции объекта.REST прерывает инкапсуляцию данных?

Представьте, что вам необходимо предоставить API REST, который осуществляет денежный перевод: перечисляет сумму из одной учетной записи в другую учетную запись. Если я понимаю REST, эти два счета должны быть представлены как ресурсы, и для этих двух ресурсов необходимо будет задействовать две разные операции UPDATE. Для меня это похоже на явное нарушение инкапсуляции данных. Моя тенденция заключается в создании API, который моделирует операцию «перевод денег», а не ресурсную «учетную запись». Могу ли я создать REST API, который выполняет «передачу данных»? Это больше не REST (поскольку он не является ресурсным центром).

Любые комментарии к этим сценариям, где вызовы RPC выглядят более подходящими, чем REST?

Благодаря

+0

В службе RESTful вам просто нужно вызвать метод отправки, чтобы перевести средства из одной учетной записи в другую и передать всю информацию в почтовом теле! Я не понимаю, зачем вам нужны два ресурса для одной транзакции. – Nilesh

+0

Моя тенденция - делать то, что вы предлагаете. Я изучаю REST, и я обеспокоен тем, что если я сделаю то, что вы предлагаете, я больше не использую REST (который должен быть ориентирован на ресурсы), а скорее вызов RPC, маскирующийся как REST. – DanDan

+0

Не существует правила, согласно которому ресурс должен отображаться в реальном объекте в вашей системе. У вас может быть составной ресурс или ресурс, представляющий результат операции. –

ответ

4

Я бы утверждать, что передача сама по себе является ресурсом, с его собственным жизненным циклом. Мы можем перенаправить ресурс передачи (в бизнес-условиях) инициировать передачу. Ресурс передачи будет ссылаться на ресурсы учетной записи; Ресурсы, ссылающиеся на другие ресурсы, - RESTful.

Мы можем получить ресурс передачи, чтобы определить его состояние.

Мы даже с обновлениями POST к ресурсу должны, например, некоторая часть информации быть неполной.

+1

+1, потому что это именно то, что я собирался предложить. –

+1

Да, ресурс может быть по существу любой согласованной и содержательной концепцией, которая может быть решена. – dmitri

1

Это действительно зависит от ваших предпочтений. Определение APIS в чистом REST-способе или с некоторой снисходительностью зависит от вас.

REST стандартизовал способ определения API для удобства обслуживания.

Например, в SOAP дней, если вы должны создать/изменить/удалить учетную запись там будет три различных определений API как createAcct. updateAccount, deleteAccount.

Теперь с REST вы должны определить только один /счета/ и будет предполагаться, что GET, PUT, POST и DELTE методы HTTP сделать соответствующие действия.

Чтобы ответить на ваш вопрос в вашем случае API может быть определена двумя способами

1) - /счета/1234/передачи/ или имеют вывесить JSON тела * {to_account: 1212, количество: 1221} * в качестве части запроса. Это НЕ ЧИСТЫЙ ОТДЫХ, способ сделать это

. Потому что вы определяете действие как часть API.

2) - /счет/1234/транзакции - после JSON тело * {типа: трансфер, to_account: 1212, количество: 1212} * - Это PURE REST путь, так как сделка вида нового ресурса вы собираются создать в вашей системе.

Для многих отдыха есть исключения из чистого пути REST.одним из примеров является «resetpassword». Попытайтесь взломать некоторые из них, используя firebug, вы получите общее понимание.

+1

+1. На деле альтернатива 2 имеет больше смысла. Это также проще, если у вас есть несколько типов денежных переводов между счетами, такими как депозиты, платежные поручения и т. Д., Потому что вы не вставляете эту информацию в URL-адрес. –

Смежные вопросы