【问题标题】:Backend transactions with REST API使用 REST API 的后端事务
【发布时间】:2019-08-27 19:16:33
【问题描述】:

我有一个关于 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);
}
  1. 我对 REST API 方法感到困惑,因为它们只更新 资源。更新资源不会改变应用程序中的其他底层细节吗?
  2. 阅读有关 REST 的内容会混淆事务原子性是如何产生的 解决了。 REST 中此类活动的解决方案是什么?
  3. 我无法使用多阶段方法(首先保存交易,然后使用交易 ID 创建分类帐等)从客户端 (javascript) 进行这些多次保存,因为客户端应用程序应该不知道此类与后端服务相关的操作.

有人可以清楚地解释在这种特殊情况下如何处理吗?

许多应用程序都与财务和会计相关,但我就是不明白为什么 REST 不适合这种实际场景。可能是我的理解不同。

【问题讨论】:

    标签: java spring rest transactions


    【解决方案1】:

    当我在 RestController 中处理这个问题时,我想做以下 -

    • 基于 POST 创建事务。
    • 在后端创建一个分类帐条目。 (客户端 - javascript 应该不知道)
    • 更新帐户上的余额条目。 (客户端 - javascript 应该不知道)

    这一切似乎都很合理。

    我对 REST API 方法感到困惑,因为它们只更新资源。

    所以我的诊断是你是semantic diffusion的受害者;在你学会之前,REST 的含义发生了多大的变化?

    你最好的起点可能是Jim Webber's 2011 talk

    您必须学习如何使用 HTTP 来触发业务活动,这是在网络上移动文档的副作用。

    HTTP 告诉您请求的语义是什么——这就是 REST 所称的“统一接口”——但它没有说明任何副作用。在您的域中,您通过更新分类帐和余额来响应 POST 请求这一事实很好

    如果有帮助:这与网站的工作方式完全相同。你填写一个表单并提交它,结果是一些网页(资源)发生了变化,而且在后端发生了一堆有趣的事情。

    【讨论】:

      猜你喜欢
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2020-09-05
      相关资源
      最近更新 更多