我有一个提供发票功能的REST服务,例如我可以通过REST服务创建,更新和删除发票。
但是,我现在需要具备将发票拆分为多个新发票的功能,即该方法需要根据一张发票创建x发票,然后在一次交易中删除原始发票。
我还需要一个相反的合并方法,即多个发票合并为一个。
如何以RESTful方式创建此类架构?
答案 0 :(得分:4)
我们有一个类似的问题,我们想要合并2个资源。经过长时间的辩论,我们决定一个消费者会POST一个合并请求资源,其中包含要合并的2个资源。然后在查看之后我们决定不需要完整的源和目标资源,而只是唯一标识符的POST就足够了。我们没有提出合并请求只有2个ID进入正文。在URL中表示更容易,这就是我们所做的。 POST合并请求的响应是合并的资源。
我想我不是一个足够的REST大师告诉你这是一个好策略,但对我们来说这是一个简单的解决方案,所以我们选择了它。
答案 1 :(得分:2)
当您说要在“一个事务”中实现此功能时,我假设您已经确定应该将新发票的生成和旧发票的删除组合到一个API调用中;这是正确的方法。使用Web服务,您确实希望减少聊天,并且可能存在一些关于此功能如何生成新发票并删除旧发票的业务逻辑。所以我假设当你问如何以RESTful方式构建它时,你想知道为这个新的API方法使用哪个HTTP动词(即GET,POST,PUT或DELETE)。通常这些动词以下列方式映射到CRUD类型操作:
当你的函数创建和删除记录时,使用哪个动词。 REST API的一般规则是,如果没有到CRUD的清晰映射,则在服务器状态发生更改时使用POST,如果只返回不更改服务器状态的信息则使用GET。所以在这种情况下我会使用POST。
如果您正在寻找有关架构设计的其他指导,请更具体地了解您的需求,我会尽力提供帮助。
答案 2 :(得分:0)
我会做类似的事情,
POST /InvoiceSplitter?sourceInvoiceId=99
和
POST /InvoiceMerger?sourceInvoiceIds=101,87,23,45