如何将结帐流程重构为服务

时间:2017-11-14 14:59:53

标签: api architecture e-commerce graphql

我有一个电子商务网站,我目前正在脱钩,因此它可以作为纯后端。

对于购物车成为订单,有一个工作流程(结账),客户必须通过该工作流程来下订单。结帐现在是后端服务,我想知道我应该如何处理它。

具体而言,每个新订单都必须包含:商品,帐单邮寄地址,送货地址,付款方式和送货方式。管理员可以创建其他字段,更改流程(步骤顺序)等。以API为中心的架构,我不知道如何与前端沟通流程。

当然,前端基本上会自行处理流量。但是例如在后端逻辑中,运​​输方法取决于提供的送货地址和付款方式取决于帐单地址 - 防止使用现金支付方法为不同国家的客户或使用当地自行车承运人为国际目的地...例如。

我应该如何与客户沟通需要哪些数据,按顺序(依赖项),我已经拥有哪些数据以及必须提供哪些其他数据?

1 个答案:

答案 0 :(得分:1)

如果前端执行无序操作,您基本上可以处理此异常。它的有状态意味着你需要创建一些东西,然后多次修改它。如果你想强制执行这个,你基本上会创建一个订单(带有项目),

POST /orders <new order>
POST /orders/<ordernum>/items
POST /orders/<ordernum>/billingaddress
POST /orders/<ordernum>/shippingaddress
GET /orders/<ordernum>/availableshippingmethods (throws an error code if billing address not set)
GET /orders/<ordernum>/availablepaymentmethods (throws an error if shipping address not set)
POST /orders/<ordernum>/shippingmethod (throws an error if billing address not set)

等等......只需设置你的步骤依赖项,如果它们做错了就抛出错误。

这种方式将业务逻辑保留在前端,并且流程的API要求是相当自我描述的(试图让运输方法告诉您忘记做什么)。