Дизайн, совместимый с RESTful

Рассмотрим, что мне нужно разработать банковское приложение REST, которое позволяет создавать/уничтожать банковские счета, а также следующие операции на счете: вывод/кредит/getBalance.

  • Создание учетной записи

PUT/Bank/john

Здесь я использую PUT вместо POST, потому что эта операция idempotent и потому, что клиент передает URL

  • Уничтожение учетной записи

DELETE/Bank/john

  • GetBalance

GET/Bank/john

  • Снять деньги с учетной записи

POST/Bank/john

действие = вывести & value = 10

  • Кредит на счет

POST/Bank/john

действие = кредитной & value = 10

Здесь я использовал POST, потому что вывод/кредит явно не идемпотентный

является ли RESTful способ разработки этих операций?

У меня такое ощущение, что я пишу что-то вроде RPC-like, помещая глаголы (отменить | кредит) внутри параметр действия.. и я часто читаю, что REST не должен имитировать стиль RPC...

Ответ 1

Я не думаю, что вы должны добавить вещи "action = credit & value = 10". Вы можете создавать больше/больше URI. Например:

create an account: POST /Bank/Accounts/John
credit money to an account: POST /Bank/John/Money/10

Ответ 2

При работе с REST это обычно помогает начать с размышлений с точки зрения ресурсов. В этом случае ваш ресурс - это не просто ваш "банковский счет", а транзакция этого банковского счета.

Депозит

POST /Bank/Account/John/Transaction

currency=USD&amount=10

Вывод

POST /Bank/Account/John/Transaction

currency=USD&amount=-10

Вы должны включить заголовок Location в эту недавно созданную транзакцию.

Вы создаете транзакцию. Преимущество этого заключается в том, что вы можете ссылаться на эту транзакцию как ресурс.

GET /Bank/Account/John/Transaction/12345

Это может вернуть запись этой точной транзакции (например, ваши пользователи обычно хотят записи дебетов и кредитов на их учетной записи).