如何查看我的订单-REST的流程API设计案例(4)
既然第一种使得我们即时查看我们订单状态成本太大,那我们看看第二种方法:使用一个统一的流程管理系统来管理整个端到端的流程。

?
业务流程管理系统的职责有两个:一是由其管理起各个系统间的集成工作,这样避免了各个系统间的大量耦合;二是由其跟踪订单状态,完成订单在整个流程中的可视化。

?
我们来看看具体的api调用,当我们在框框网站提交一个ID为1000的订单时,框框网站会发送一个消息到http://api.kuangkuang-bpm.com/process-definition/1,由此触发整个的流程,启动一个新的流程实例。发送的消息:
<order> <link rel="detail" media-type="application/xml" url="http://api.kuangkuang.com/order/1000"/> <content> <id>1000</id> <cost>88.0</cost> </content></order>?
业务流程管理系统给我们返回的消息:
<process-instance> <link rel="process-instance" media-type="application/xml" url="http://api.kuangkuang-bpm.com/process-instance/1"/> <content> <id>1</id> <data> <order-id>1000</order-id> <order-cost>88.0</order-cost> </data> <definition> <link rel="process-definition" media-type="application/xml" url="http://api.kuangkuang-bpm.com/process-definition/1"/> </definition> <current-activity> <name>订单提交</name> <link rel="activity-definition" media-type="application/xml" url="http://api.kuangkuang-bpm.com/activity-definition/1"/> </current-activity> </content></process-instance>?
返回的消息中给我们指出了该订单所关联的流程实例ID,当前正在执行的任务。流程系统创建流程实例后接下来继续往下执行,它发送一个消息到框框的后台ERP系统,触发后台ERP系统对订单的处理,同时告诉其访问当前流程实例的URI。现在我们假设流程执行到物流公司的配送任务,我们在框框网站查看订单的即时状态系统会有哪些动作。第一步我们同样是GET:http://api.kuangkuang.com/order/1000,返回的数据:
<order> <link rel="detail" media-type="application/xml" url="http://api.kuangkuang.com/order/1000"/> <link rel="process-instance" media-type="application/xml" url="http://api.kuangkuang-bpm.com/process-instance/1"/> <content> <id>1000</id> <cost>88.0</cost> </content></order>?
<process-instance> <link rel="process-instance" media-type="application/xml" url="http://api.kuangkuang-bpm.com/process-instance/1"/> <content> <id>1</id> <data> <order-id>1000</order-id> <order-cost>88.0</order-cost> </data> <definition> <link rel="process-definition" media-type="application/xml" url="http://api.kuangkuang-bpm.com/process-definition/1"/> </definition> <current-activity> <name>物流配送</name> <type>sub-process</type> <link rel="detail" media-type="application/xml" url="http://api.zjs-erp.com/order/2000"/> <link rel="activity-definition" media-type="application/xml" url="http://api.kuangkuang-bpm.com/activity-definition/3"/> </current-activity> <history> <activity name="提交订单" type="start" time="2011-6-29 14:00" participant="ronghao"/> <activity name="仓储出货" type="sub-process" time="2011-6-29 15:30"> <link rel="detail" media-type="application/xml" url="http://api.kuangkuang-erp.com/order/1000"/> </activity> </history> </content></process-instance>?
<order> <link rel="detail" media-type="application/xml" url="http://api.zjs-erp.com/order/2000"/> <link rel="process-instance" media-type="application/xml" url="http://api.kuangkuang-bpm.com/process-instance/1"/> <content> <id>2000</id> <cost>88.0</cost> <current-activity> <name>配送</name> </current-activity> <history> <activity name="接受包裹配送单" time="2011-6-29 15:40" participant="ronghao"/> <activity name="包裹入库" time="2011-6-29 15:45" participant="xinpeng"/> </history> </content></order>?
第二个问题,kuangkuang-bpm.com算是云服务否?框框私有云。