RESTful兼容设计
让我们考虑一下我需要开发一个REST银行应用程序,该应用程序允许创建/销毁银行帐户以及在帐户上执行以下操作: :withdraw/credit/getBalance。RESTful兼容设计
- 创建一个帐户的
PUT /银行/约翰
这里我用PUT POST而不是因为这个操作是 幂和因为客户端是给的网址
- 销毁账户
删除/银行/约翰
- 为getBalance
GET /银行/约翰
- 从账户提款
POST /银行/约翰
action =撤消&值= 10
- 信贷资金的帐户
POST /银行/约翰
行动=信用&值= 10
在这里,我用POST因为撤/信贷显然不是幂等的
它是一种设计这些操作的RESTful兼容方式吗?
我感觉我正在写一些类似于RPC的东西,通过将动作参数放入 内部,我经常读到REST不应该模仿类RPC的风格。
我不认为你应该加上“action = credit & value = 10”的东西。您可以创建更多/更长的URI。 例如:
create an account: POST /Bank/Accounts/John
credit money to an account: POST /Bank/John/Money/10
当然,它会工作...但据我了解的原则,你的解决方案也将打破这些原则... – jean 2012-03-02 23:11:01
当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
这可能返回准确交易的记录(例如你的用户一般都希望借方和贷方对他们的账户的记录)。
谢谢nategood。我必须承认,这种设计方式对我来说并不自然(我来自CORBA世界......),但我认为您的解决方案尊重REST架构原则。 – jean 2012-03-02 23:08:55
您可能还希望有效存款和取款幂等(您希望交易发生两次)。这可以通过在“草稿”状态下创建事务并要求更新(PUT)提交来相当容易地完成。另外,为了使您的API成为真正的RESTful,您需要在响应中包含链接和表单。更多详情,请访问http://www.amundsen.com/blog/archives/1041 – 2012-03-04 21:36:55
我认为你需要消除动作动词并完全依赖(尽可能)HTTP方法来说设计是REST。 – kosa 2012-03-02 21:34:15