我对 REST API 以及如何在我们的应用程序中创建一些后端事务有疑问。 我们有一个会计应用程序,因此对于创建的每笔交易都有一个分类帐条目。 (尽管客户端 - javascript 不知道此类条目)
例如,在 REST 中,我们通过 -
POST /transactions/
(或)
POST /accounts/1223/transactions/
现在,当我在 RestController 中处理这个问题时, 我想做以下事情 -
- 基于 POST 创建事务。
- 在后端创建分类帐条目。 (客户端 - javascript 应该不知道)
- 更新帐户上的余额条目。 (客户端 - javascript 应该不知道)
在 spring java 应用程序中的 TransactionService 中(但这应该无关紧要,因为我的问题集中在 REST API 语义上),
@Transactional
public void saveTransaction(Transaction t) {
transactionRepo.save(t);
Ledger l = new Ledger(<particulars>)();
ledgerRepo.save(l);
Balance b = balanceService.get(<partiulars>);
balanceRepo.update(b);
}
- 我对 REST API 方法感到困惑,因为它们只更新 资源。更新资源不会改变应用程序中的其他底层细节吗?
- 阅读有关 REST 的内容时,会对事务原子性感到困惑 解决了。在 REST 中此类 Activity 的解决方案是什么?
- 我无法使用多阶段方法(首先保存交易,然后使用交易 ID 创建分类账等)从客户端 (javascript) 执行这些多重保存,因为客户端应用程序应该不知道此类后端服务相关操作.
有人可以清楚地解释在这种特定情况下如何处理吗?
许多应用程序都与财务和会计相关,但我只是不明白为什么 REST 不适合这种实际场景。可能是我的理解不同吧。
最佳答案
when I deal with this in RestController, I want to do the following -
- Create the Transaction based on POST.
- Create a ledger entry in the back-end. (Client - javascript should be unaware)
- Update the balance entry on the account. (Client - javascript should be unaware)
这一切看起来都很合理。
I am confused with the REST API approach as they only update the resource.
所以我的诊断是你是 semantic diffusion 的受害者;在您学习 REST 之前,它的含义发生了多大变化?
您的最佳起点可能是 Jim Webber's 2011 talk
You have to learn how to use HTTP to trigger business activity as a side effect of moving documents around the network.
HTTP 告诉您请求的语义是什么——这就是 REST 所说的“统一接口(interface)”——但它没有说明任何有关副作用的信息。事实上,在您的域中,您通过更新分类帐和余额来响应 POST 请求,这是很好。
如果有帮助的话:这与网站的工作方式完全相同。您填写表格并提交,一些网页(资源)因此发生变化,但后端也发生了很多有趣的事情。
关于java - 使用 REST API 进行后端事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57680964/