这太简单了,流程在哪里
在上面的例子里,我们看到了订单的CRUD操作,但这并不是实际生活中的真实情况,整个订单的生命周期如下图所示:
在实现这个流程时,我们分为两步:第一步对订单进行资源建模;第二步通过工作流对订单进行流程的生命周期管理。
工作流的职责在于管理订单的生命周期,在其生命周期的不同阶段,我们会有不同的参与者,对订单不同的操作权限。我们的系统架构演变成下面的样子:
看例子,这次将我们视角转移到框框网这边,看看框框如何处理我们已提交的订单。我们使用GET:http://api.kuangkuang.com/orders?status=waiting-review来获取所有需要审核的订单,服务器返回以下的数据:
<orders>
<link rel="list" media-type="application/xml" url="http://api.kuangkuang.com/orders"/>
<order>
<id>1000</id>
<state>waiting review</state>
<link rel="detail" media-type="application/xml" url="http://api.kuangkuang.com/order/1000"/>
</order>
</orders>
我们查看具体的订单信息,我们GET:http://api.kuangkuang.com/order/1000,服务器判断出我们是框框网员工,返回以下的数据:
<order>
<link rel="detail" media-type="application/xml" url="http://api.kuangkuang.com/order/1000"/>
<content>
<id>1000</id>
<cost>88.0</cost>
<state>waiting review</state>
<squence>
<activity rel="review" media-type="application/xml" url="http://api.kuangkuang.com/review/order/1000"/>
</squence>
</content>
</order>
注意到这两行:
<state>waiting review</state>
<squence>
<activity rel="review" media-type="application/xml" url="http://api.kuangkuang.com/review/order/1000"/>
</squence>
这段信息是由工作流加入的,它告诉我们当前订单的状态为等待审核以及下一步需要我们来审核。那么,我们PUT
http://api.kuangkuang.com/review/order/1000告诉服务器我们审核通过,服务器返回数据:
<order>
<link rel="detail" media-type="application/xml" url="http://api.kuangkuang.com/order/1000"/>
<content>
<id>1000</id>
<cost>88.0</cost>
<state>waiting send</state>
<squence>
<activity rel="send" media-type="application/xml" url="http://api.kuangkuang.com/sent/order/1000"/>
</squence>
</content>
</order>
同样,工作流加入了这两行数据:
<state>waiting send</state>
<squence>
<activity rel="send" media-type="application/xml" url="http://api.kuangkuang.com/sent/order/1000"/>
</squence>
告诉我们当前订单状态为等待送货,而下一步需要我们来完成这一步。此时,如果顾客来查看自己的订单会得到什么数据呢?服务器会判断出当前请求的用户是顾客,那么:
<order>
<link rel="detail" media-type="application/xml" url="http://api.kuangkuang.com/order/1000"/>
<content>
<id>1000</id>
<cost>88.0</cost>
<state>waiting send</state>
</content>
</order>
顾客能够看到自己的订单正处于等待送货状态,而不会有下一步的动作。恩,很好,框框网订单处理速度很快,而这正是网购的主要竞争力之一。
在这些交互中,最重要的是我们通过工作流实现了REST社区所呼吁的“将超媒体作为应用状态的引擎(hypermedia
as the engine of application state)”。更简单地说,URI代表了状态机里的状态迁移。我们通过<squence>和<activity>标签让客户端是通过跟随链接的方式来操作订单状态机的状态转移。
等等,实际情况不是这样,框框自己并不送货,好吧,那就下一篇见。
- 大小: 24.4 KB
- 大小: 67.8 KB
- 大小: 66.1 KB
- 大小: 29.2 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应用程序之间的数据库通信。通过提取实现...