2012-03-02 75 views
2

讓我們考慮一下我需要開發一個REST銀行應用程序,該應用程序允許創建/銷燬銀行帳戶以及在帳戶上執行以下操作: :withdraw/credit/getBalance。RESTful兼容設計

  • 創建一個帳戶的

PUT /銀行/約翰

這裏我用PUT POST而不是因爲這個操作是 冪和因爲客戶端是給的網址

  • 銷燬賬戶

刪除/銀行/約翰

  • 爲getBalance

GET /銀行/約翰

  • 從賬戶提款

POST /銀行/約翰

action =撤消&值= 10

  • 信貸資金的帳戶

POST /銀行/約翰

行動=信用&值= 10

在這裏,我用POST因爲撤/信貸顯然不是冪等的

它是一種設計這些操作的RESTful兼容方式嗎?

我感覺我正在寫一些類似於RPC的東西,通過將動作參數放入 內部,我經常讀到REST不應該模仿類RPC的風格。

+0

我認爲你需要消除動作動詞並完全依賴(儘可能)HTTP方法來說設計是REST。 – kosa 2012-03-02 21:34:15

回答

0

我不認爲你應該加上「action = credit & value = 10」的東西。您可以創建更多/更長的URI。 例如:

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

當然,它會工作...但據我瞭解的原則,你的解決方案也將打破這些原則... – jean 2012-03-02 23:11:01

1

當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 

這可能返回準確交易的記錄(例如你的用戶一般都希望借方和貸方對他們的賬戶的記錄)。

+0

謝謝nategood。我必須承認,這種設計方式對我來說並不自然(我來自CORBA世界......),但我認爲您的解決方案尊重REST架構原則。 – jean 2012-03-02 23:08:55

+0

您可能還希望有效存款和取款冪等(您希望交易發生兩次)。這可以通過在「草稿」狀態下創建事務並要求更新(PUT)提交來相當容易地完成。另外,爲了使您的API成爲真正的RESTful,您需要在響應中包含鏈接和表單。更多詳情,請訪問http://www.amundsen.com/blog/archives/1041 – 2012-03-04 21:36:55