既然第一种使得我们即时查看我们订单状态成本太大,那我们看看第二种方法:使用一个统一的流程管理系统来管理整个端到端的流程。
业务流程管理系统的职责有两个:一是由其管理起各个系统间的集成工作,这样避免了各个系统间的大量耦合;二是由其跟踪订单状态,完成订单在整个流程中的可视化。
我们来看看具体的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>
返回的消息中多了一个访问流程实例的URI,那么我们的客户端程序继续GET:http://api.kuangkuang-bpm.com/process-instance/1,返回的数据:
<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>
我们看到当前正在执行的任务是物流配送,这是一个子流程任务,想具体了解这个子流程执行的情况,我们的客户端程序继续GET:http://api.zjs-erp.com/order/2000,啊哈,框框将配送任务外包给了宅急送啊。
<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所提供的流程服务将各个系统进行了数据和流程的集成;二是各个被集成的系统也需要实现rest的api以供我们的客户端程序进行数据的mashup。
故事完了吗?还没有,京东618活动简报:收获订单40多万份,订购金额超2亿,已经发货一个多亿,尚有十几万份订单积压,大约三日左右可以处理完毕。不足之处:流量多次超过4个G,服务器运行缓慢;图书备货量严重不足。与服务器相比,我更加关心如何及时将这几十万份订单处理完毕以及库存如何应对促销而产生的水平震荡,这显然不是一家物流公司可以完成的,需要多家物流公司一起消化这些订单,那么,问题来了,当我们mashup数据时,如何对这些物流公司返回的不同的数据格式进行处理?这时就需要标准化media type了,建立行业标准,企业级rest等于自定义、创造和标准化media type。
第二个问题,kuangkuang-bpm.com算是云服务否?框框私有云。
- 大小: 78.6 KB
- 大小: 53.9 KB
分享到:
相关推荐
赠送原API文档:elasticsearch-rest-high-level-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-high-level-client-6.8.3-sources.jar; 赠送Maven依赖信息文件:elasticsearch-rest-high-level-client...
赠送原API文档:elasticsearch-rest-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-client-6.8.3-sources.jar; 赠送Maven依赖信息文件:elasticsearch-rest-client-6.8.3.pom; 包含翻译后的API文档...
赠送原API文档:elasticsearch-rest-high-level-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-high-level-client-6.8.3-sources.jar; 赠送Maven依赖信息文件:elasticsearch-rest-high-level-client...
Atlas-rest-Api接口文档 官网地址http://atlas.apache.org/api/v2/index.html
Dell-Storage-REST-API,Dell-Storage-REST-API,Dell-Storage-REST-API,Dell-Storage-REST-API
赠送原API文档:elasticsearch-rest-client-6.2.3-javadoc.jar; 赠送源代码:elasticsearch-rest-client-6.2.3-sources.jar; 赠送Maven依赖信息文件:elasticsearch-rest-client-6.2.3.pom; 包含翻译后的API文档...
赠送原API文档:activiti-common-rest-5.21.0-javadoc.jar; 赠送源代码:activiti-common-rest-5.21.0-sources.jar; 赠送Maven依赖信息文件:activiti-common-rest-5.21.0.pom; 包含翻译后的API文档:activiti-...
icontrol-rest-api-user-guide-13-0-0.pdf
azure-rest-api-specs, 微软Azure的REST API 规范源代码 Azure REST API 规范描述这个存储库是微软Azure的REST API 规范的规范源。新闻在假期期间,我们将对 Azure REST API 规范知识库进行一些改进:我们将停止合并...
赠送原API文档:elasticsearch-rest-client-6.3.0-javadoc.jar; 赠送源代码:elasticsearch-rest-client-6.3.0-sources.jar; 赠送Maven依赖信息文件:elasticsearch-rest-client-6.3.0.pom; 包含翻译后的API文档...
chromecj.com-Restlet-Client-REST-API-Testing_v2.8.0.1非常实用的谷歌插件
赠送原API文档:elasticsearch-rest-client-6.3.0-javadoc.jar; 赠送源代码:elasticsearch-rest-client-6.3.0-sources.jar; 赠送Maven依赖信息文件:elasticsearch-rest-client-6.3.0.pom; 包含翻译后的API文档...
ASA restapi文件
赠送原API文档:elasticsearch-rest-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-client-6.8.3-sources.jar; 赠送Maven依赖信息文件:elasticsearch-rest-client-6.8.3.pom; 包含翻译后的API文档...
DHC-REST-HTTP-API-Client(chrome插件),进入chrmoe插件开发模式,拖动进去便可自动安装。
chromecj.com-Restlet-Client-REST-API-Testing_v2.8.0.1.crx
flask-rest-jsonapi, Flask 扩展,围绕 JSONAPI 1.0规范构建 REST api Flask-REST-JSONAPIFlask-REST-JSONAPI是用于构建 REST api的Flask 扩展。 它结合了 restless restless 和灵活的烧瓶的灵活性,围绕一个强有力...
Laravel开发-laravel-rest-api 向项目中添加RESTAPI的简单方法
JUNOS 14.2版本开始支持REST API功能,REST API功能通常配合应用程序开发来使用,在没有应用程序配合时,往往无法直观的进行JUNOS REST API功能演示。另外,在进行REST API开发时,开发人员需要简明的示例作为参考,...
Api-REST-API.zip,了解如何使用python、django和django rest framework.rest-api构建自己的restapi,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现...