2015-10-30 13 views
6

私はいくつかの二重入力簿記が必要なアプリケーションで作業しています。現在、2つのエンドポイントREST APIの集計値

/account 
/transaction 

/accountは、アカウントの一般的なデータを扱う一方で、/transactionは預金/撤退のためのトランザクションを処理があります。口座残高は、関連する取引に基づいて計算されます。私は、1つの口座から別の口座に金額を振り替える際に、簿記の一貫性を得るためにそれらを分けていました。

私の質問は、/accountエンドポイントのアカウント残高をどのように表現するかです。これは、リクエスト時に常に計算されるためです。レスポンスは読み込み専用フィールドとして残高を含んでいなければなりませんか?これ以外のすべてのフィールドは書き込み可能/更新可能なので、これは悪いAPIデザインのような臭いをします。

は私の心に来るの代替はに関する口座の残高のみを返す

/account/{id}/balance 

にエンドポイントを拡張することです。ただし、アカウントの残りのデータに加えて残高を得るためには、常に2回目の呼び出しが必要です。たぶん答えは、集計された値を表現する方法を一般化することができます。

答えて

0

非常に良い質問です。私はこのような状況に頻繁に遭遇します。私は二つのことを言うだろう:

  1. をあなたはおそらく「ID」のような他の「読み取り専用」のフィールドを、持っている
  2. あなたはそれはあなたが得るたびに、現在の残高を計算するのにかかる時間を負担したくないかもしれませんアカウント詳細。

私は/ account/{id}/balanceを選ぶと思いますが、このメソッドを実行するのに時間がかかることを示すために/ account/{id}/calculatebalanceという名前を付けることもできます。そして、その値が計算された値であることは明らかです。あなたが "数"の計算値を持っていたら、私は自分の意見を考え直すだろう。

2セント。

+0

通常、残りのエンドポイントにはアクションはありません。行動によって私は、 "calculatebalance"を意味します。リソース名の指定は、通常のREST規則です。 –