7

我有一个提供发票功能的 REST 服务,例如,我可以通过 REST 服务创建、更新和删除发票。

但是,我现在需要将一张发票拆分为几张新发票的功能,即该方法需要基于一张发票创建 x 个发票,然后在一次交易中删除原始发票。

我还需要一种相反的合并方法,即将多张发票合并为一张。

如何以 RESTful 方式创建这样的架构师?

4

3 回答 3

4

我们有一个类似的问题,我们想合并 2 个资源。经过长时间的辩论,我们决定消费者将发布一个合并请求资源,其中包含要合并的 2 个资源。然后在查看它之后,我们决定不需要完整的源资源和目标资源,而是仅包含唯一标识符的 POST 就足够了。我们没有在正文中仅使用 2 个 ID 来发出合并请求。在 URL 中表示更容易,所以这就是我们所做的。合并请求的 POST 响应是合并的资源。

我想我不是 REST 专家,不足以告诉你这是否是一个好策略,但对我们来说这是一个简单的解决方案,所以我们采用了它。

于 2012-04-27T11:42:06.593 回答
3

当您说要在“单笔交易”中实现此功能时,我假设您已经确定应该将新发票的生成和旧发票的删除合并到一个 API 调用中;这是正确的方法。对于 Web 服务,您确实希望减少喋喋不休,并且可能有一些关于此功能将如何生成新发票并删除旧发票的业务逻辑。所以我假设当您询问如何以 RESTful 方式构建它时,您想知道为这个新的 API 方法使用哪个 HTTP 动词(即 GET、POST、PUT 或 DELETE)。通常这些动词以下列方式映射到 CRUD 类型的操作:

  • 创建 -> 发布
  • 阅读 -> 获取
  • 更新 -> 放置
  • 删除 -> 删除

所以当你的函数创建和删除记录时使用哪个动词。REST API 的一般规则是,如果没有明确的 CRUD 映射,则如果服务器状态发生更改,则使用 POST;如果您只是返回不更改服务器状态的信息,则使用 GET。所以在这种情况下,我会选择 POST。

如果您正在寻找有关架构的更多指导,请更具体地说明您正在寻找什么,我会尽力提供帮助。

于 2012-04-27T12:42:10.430 回答
0

我会做类似的事情,

POST /InvoiceSplitter?sourceInvoiceId=99

POST /InvoiceMerger?sourceInvoiceIds=101,87,23,45
于 2012-04-27T14:13:22.760 回答