2012-03-02 12 views
2

が銀行口座の作成/破棄を可能にするREST銀行アプリケーションを開発する必要があるとします。また、アカウントの操作:withdraw/credit/getBalanceを にすることができます。この操作は べき等であるため、クライアントがURLにRESTful準拠設計

    を与えているので、代わりにPOSTのPUT

    • アカウントの作成

    PUT /銀行/ジョン・

    ここで私が使用して

  • アカウントの破壊

DELETE /銀行/ジョン・

  • GetBalance

GET /銀行/ジョン・

  • 口座からお金を引き出し

POST /銀行/ジョン・

action = withdraw &値= 10

  • クレジットお金アクション=クレジット&値=ここ10

    POST /銀行/ジョン・

アカウントに撤退/クレジットので、私はPOSTを使用しました明らかに冪等ではありません。

これらの操作を設計するためのRESTful準拠の方法はありますか?

私は(撤退|クレジット)の動詞を置くことにより、RPCのような何か書いています感じてい 内のactionパラメータを...と私は、多くの場合、その残りの部分を読むには、RPCのようなスタイルを模倣するべきではありません。..

+0

私はあなたがアクション動詞を削除し、デザインがRESTであると言うためにHTTPメソッドに(できるだけ)依存する必要があると思います。 – kosa

答えて

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

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

ありがとうございます。私はこの設計方法が私にとって自然ではないことを認めなければなりません(私はCORBA世界から来ています...)が、あなたのソリューションはRESTアーキテクチャの原則を尊重していると思います。 – jean

+0

また、預金と引き出しを実質的に偶発的にする(トランザクションが2回起こるようにしたいと思うかもしれません)。これは、「ドラフト」ステータスでトランザクションを作成し、コミットするために更新(PUT)を要求することによって、かなり簡単に実行できます。また、APIが本当にRESTfulであるためには、レスポンスにリンクやフォームを含める必要があります。詳細はhttp://www.amundsen.com/blog/archives/1041をご覧ください。 –