从自己的一次亲身经历开始这个订单的故事。故事开始于四个月前,那时我在某刚刚上市不久的网上书城姑且称其为框框网购买了一包纸尿裤,因为尺寸不对,我被迫进入框框的退货流程,作为框框的资深用户,我对框框的服务质量充满了信心,但是这次,注定了我的失望。事情起源于快递公司取回了纸尿裤却没有还款给我,于是,在两个月的时间里,我不得一次又一次的和框框的客服MM搭讪,最开始的MM很客气,她让我说出我的订单号然后说需要帮我查一查,等待两分钟后,她说需要和快递公司联系,稍后再打给我;第二个MM同上,只不过她说这是快递公司的责任,和框框无关;第三个同上;第四个同上;以此类推到最后一个已经是两个月以后,依旧同上,只不过她终于明白这根本就是框框自己的责任。在我快绝望的时候,快递公司终于上了门,快递员一脸郁闷:我被扣工资了。那一脸幽怨的表情弄得我内疚了好久。
框框的服务质量让我很失望,失望之余,我在想框框的问题出在什么地方:其实最重要的就是我失去对我订单的可视化了,我不知道我的订单现在处于一种什么样的状态,网站上根本查不着,而同样糟糕的情况也出现在框框自己身上,甚至在进一步询问快递公司前,他们也失去该订单的状态了。
在下面的章节中,我们将一起来应用rest的架构风格逐步搭建一个端到端的流程管理系统,看看如何解决这个问题,这个问题就是:看在上帝的份上,让我看看我的订单。
我想在写代码时、吃饭时和睡觉时查看我的订单
似乎就在昨天,我们还在如图1一般开发程序,我们一边打开firebug进行调试,一边诅咒IE的不得好死,那时我们的关注点集中在前端,集中在如何使各个浏览器的行为和样式保持一致。而服务器端则是经典的MVC框架,直接将渲染好的HTML文档扔回客户端。
然而到了今天,一切都发生了变化,我们开发的程序成了图2的样子,随着IE向标准的靠拢,HTML5似乎有一统客户端之势,然而,移动互联网的兴起让我们编写程序重新变得复杂,昨天我只需要支持浏览器,现在则需要支持各种手机平台上的原生应用。自然,和昨天存在大量的javascript和css框架来抹平不同浏览器之间的差别一样,现在我们也有了PhoneGap和Titanium来抹平不同平台之间的差别,尽管目前这些跨平台工具还存在用户体验不理想的问题,但最重要的变化来自两个方面:一是客户端重新变胖;二是服务器端由返回内容退化为返回数据,具体表现就是对客户端暴露出API。
移动互联网使得我可以在写代码时、吃饭时和睡觉时甚至坐马桶时随时查看我的订单,而本文后续的架构变化也会围绕着图2逐渐演进。至于明天HTML5是否会最终代替原生应用,我觉得不会,不仅仅是技术原因更重要的是商业原因,替代的后果是苹果变得和现在的微软一样尴尬,那么,也许后天?
好吧,既然是REST的API设计,我们来看看REST的架构风格。RESTful
架构遵从以下几个原则:
l 请求是客户-服务器 式的,并很自然地使用一种基于拉的交互风格。
l 请求是无状态的。每个从客户端到服务器端的请求都必须包含理解此请求所需的全部信息,而且不能利用服务器上所存储的上下文。
l 客户端和服务器都遵从统一的接口。所有的资源都可通过
Web 的普通接口进行访问
—— HTTP 及
HTTP 方法:GET、POST、PUT
和
DELETE。
l 客户端通过URI与命名的资源进行交互。
看例子,我们以订单列表作为整个应用的调用入口,我们首先会GET:http://api.kuangkuang.com/orders,服务器返回以下的数据:
<orders>
<link rel="list" media-type="application/xml" url="http://api.kuangkuang.com/orders"/>
<order>
<id>1000</id>
<state>draft</state>
<link rel="detail" media-type="application/xml" url="http://api.kuangkuang.com/order/1000"/>
</order>
<order>
<id>1001</id>
<state>completed</state>
<link rel="detail" media-type="application/xml" url="http://api.kuangkuang.com/order/1001"/>
</order>
</orders>
在返回的数据中,我们看到了:
<link rel="detail" media-type="application/xml" url="http://api.kuangkuang.com/order/1001"/>
这个链接引导我们查看具体的订单信息,我们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>
<state>draft</state>
<cost>88.0</cost>
<link rel="edit" media-type="application/xml" url="http://api.kuangkuang.com/order/1000"/>
<link rel="delete" media-type="application/xml" url="http://api.kuangkuang.com/order/1000"/>
</content>
</order>
这里我们看到了两个链接:
<link rel="edit" media-type="application/xml" url="http://api.kuangkuang.com/order/1000"/>
<link rel="delete" media-type="application/xml" url="http://api.kuangkuang.com/order/1000"/>
它们告诉我们可以对这个处于草拟状态的订单进行修改和删除。我们GET另外一个已完成的订单看看:http://api.kuangkuang.com/order/1001,返回数据:
<order>
<link rel="detail" media-type="application/xml" url="http://api.kuangkuang.com/order/1001"/>
<content>
<id>1001</id>
<state>completed</state>
<cost>66.0</cost>
</content>
</order>
没有更多的链接,这意味着我们只能对该订单进行查看。
在这些交互中,最重要的是服务器端返回数据本身已包含了对其他资源访问和对现在资源操作的线索。这样的好处在于客户端只需要一个入口地址,其他所有的操作地址全部由服务器端确定,这使得客户端与服务器端解耦,客户端不必再硬编码入URI,能够各自独立的进化,服务器端负责数据、权限以及交互URI的确定,客户端重新回归展现数据的单一职责。
等等,这也太简单了,流程在哪里?下篇会讲。
- 大小: 67 KB
- 大小: 62.9 KB
分享到:
相关推荐
Odoo的API设计遵循REST原则,采用HTTP方法如GET、POST、PUT、DELETE来执行CRUD(创建、读取、更新、删除)操作。例如,GET请求用于获取资源信息,POST用于创建新记录,PUT用于更新已有记录,而DELETE则用于删除记录...
本教程将带你深入学习如何使用.Net Core技术栈来开发电商后端API,帮助你从入门到精通,全面掌握RESTful API的设计原则和实践方法。 .Net Core 是微软推出的一款开源、跨平台的框架,它支持Windows、Linux、macOS等...
在本项目"restapi-shopdb"中,开发者创建了一个RESTful API,主要目的是为了支持用户进行注册、登录以及订购和查看产品。这个API是基于Node.js构建的,使用了MongoDB作为后端数据库,同时也利用JavaScript作为编程...
3. **RESTful API设计**: Checkout API作为一个Web服务,可能会遵循RESTful原则,提供一套以HTTP方法(GET、POST、PUT、DELETE等)来操作资源的接口。这使得API易于理解和使用,并且可以与各种类型的客户端(如Web...
总之,Django REST framework是一个强大的工具,它简化了API开发流程,让开发者能够专注于业务逻辑,而无需过多关注底层实现细节。通过深入学习和实践,你可以利用DRF构建出功能强大、易于使用的Web API。
资源模型是API设计中的核心概念,定义了可以进行操作的资源和它们之间的关系,以及资源的属性和行为。 #### Managed Entity and Task Resource Models 管理实体和任务资源模型涉及产品目录中的实体如何被管理和任务...
- **RESTful API设计**:学习如何设计符合REST原则的API接口,实现前后端分离。 - **安全性**:了解Spring Security的基本用法,实现用户认证和授权。 - **前端开发**:掌握基本的HTML、CSS和JavaScript,以及前端...
1. **REST API**:主要用于处理数据的增删查改操作,如商品上架、更新等。 2. **PAGE API(页面级API)**:用于处理涉及资金流转的操作,如支付、退款等,以确保交易过程的安全性。 3. **NOTIFY API(异步消息API)*...
在本案例中,C#被用于创建客户端库,使得开发者可以更方便地用C#与WooCommerce REST API交互。 4. **客户端库**: 客户端库(SharpCommerce)简化了与远程API的交互,通常封装了请求/响应处理、错误处理、身份验证等...
- 设计一个简单的订单处理流程,包括接收订单请求、验证订单信息、处理订单逻辑等步骤。 - 可以使用 MuleStudio 提供的模板作为起点,快速搭建基础框架。 5. **运行与调试**: - 在 MuleStudio 内部直接运行示例...
3. **RESTful API设计**:后端需提供符合REST原则的接口,用于微信小程序调用,涉及HTTP请求方法和状态码的使用。 4. **数据库设计**:可能包括用户表、菜品表、订单表等,涉及SQL查询和事务处理。 5. **用户认证与...
7. **RESTful API设计**: 为了实现小程序与服务器之间的通信,需要定义一套RESTful API接口,如POST提交打印任务、GET获取任务状态、PUT更新订单信息等。遵循REST原则可以使接口设计更加清晰、易于理解和维护。 8...
在IT行业中,API(应用程序接口)是连接...综上所述,“link-api-test”项目是IT领域中一个典型的跨平台API集成案例,涵盖了API设计、测试、安全和部署等多个方面,对于提升企业数据管理和业务流程效率有着重要意义。
遵循REST(Representational State Transfer)原则,API设计应清晰、简洁,支持CRUD(创建、读取、更新、删除)操作。 6. **权限控制与安全** 对于物流管理系统,权限控制至关重要。开发者可能使用了基于角色的...
- **RESTful API**:使用@RequestMapping及其子注解,创建符合REST原则的API接口。 5. **安全控制**: - **Spring Security**:提供了一套强大的安全控制机制,可以处理用户认证、权限管理等问题。 6. **支付...
4. RESTful API设计:为了使微信小程序与后端服务器进行通信,需要设计符合REST原则的接口,定义HTTP方法、URL路径和响应格式。 5. 用户认证与授权:实现用户注册、登录功能,可能使用OAuth2或其他身份验证协议,...
- RESTful API:设计符合REST原则的API接口,前后端分离,提高系统的可扩展性。 - JWT(JSON Web Token):用于实现安全的用户认证和授权。 - Docker:可能用于部署环境的标准化,方便测试和迁移。 在PPT部分,可能...