RESTful совместимый дизайн - PullRequest
       12

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

2 голосов
/ 03 марта 2012

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

  • Созданиеaccount

PUT / Bank / john

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

  • Уничтожение аккаунта

УДАЛИТЬ / Банк / Джон

  • GetBalance

GET / Банк / Джон

  • Снять деньги со счета

POST / Bank / john

action = снять & value = 10

  • Зачислить деньги на счет

POST / Bank / john

action = credit & value = 10

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

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

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

Ответы [ 2 ]

3 голосов
/ 03 марта 2012

Когда речь идет о 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

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

1 голос
/ 03 марта 2012

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

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