RESTAPI中的聚合值

RESTAPI中的聚合值,api,rest,transactions,aggregate,value-objects,Api,Rest,Transactions,Aggregate,Value Objects,我正在处理一个需要一些复式簿记的应用程序。目前有两个端点 /account /transaction 当/account处理账户的一般数据时,/transaction处理存款/取款交易。账户余额根据关联交易计算。我将它们分开,以便在将价值从一个账户转移到另一个账户时在簿记方面保持一致 我的问题是如何在/account端点表示帐户余额,因为它总是在请求时计算的。响应是否应该将余额作为只读字段包含?这听起来像是糟糕的API设计,因为除了这个字段之外,所有字段都是可写/可更新的 我想到的另一种选择是

我正在处理一个需要一些复式簿记的应用程序。目前有两个端点

/account
/transaction
/account
处理账户的一般数据时,
/transaction
处理存款/取款交易。账户余额根据关联交易计算。我将它们分开,以便在将价值从一个账户转移到另一个账户时在簿记方面保持一致

我的问题是如何在
/account
端点表示帐户余额,因为它总是在请求时计算的。响应是否应该将余额作为只读字段包含?这听起来像是糟糕的API设计,因为除了这个字段之外,所有字段都是可写/可更新的

我想到的另一种选择是将端点扩展到

/account/{id}/balance

仅返回有关帐户的余额。但是,除了帐户的剩余数据外,这始终需要第二次调用来获取余额。也许答案可以概括为如何表示聚合值。

这是一个很好的问题。我经常遇到这样的情况。我想说两件事:

  • 您可能还有其他“只读”字段,如“id”
  • 您可能不希望在每次获得帐户详细信息时都花费计算当前余额所需的时间
  • 我想我会选择/account/{id}/balance。。。但可能将其命名为/account/{id}/calculatebalance,以表明运行此方法确实需要一些时间。很明显,这个值是一个计算值。如果你有“几个”计算值,那么我会重新考虑我的观点


    2美分。

    在rest端点中通常没有任何操作。我所说的行动是指“计算平衡”。指定资源名称是通常的REST约定。