REST即表述性状态传递(Representational State Transfer)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。 它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。 五条关键原则: 1. 为所有“事物”定义ID 在Web中,代表ID的统一概念是:URI。URI构成了一个全局命名空间,使用URI标识你的关键资源意味着它们获得了一个唯一、全局的ID。 标识所有值得标识的事物,领会这个观念可以进一步引导你创造出在传统的应用程序设计中不常见的资源: 一个流程或者流程步骤、一次销售、一次谈判、一份报价请求——这都是应该被标识的事物的示例。同样,这也会导致创建比非RESTful设计更多的持久化实体。 对此原则总结如下:使用URI标识所有值得标识的事物,特别是应用中提供的所有“高级”资源,无论这些资源代表单一数据项、数据项集合、虚拟亦或实际的对象还是计算结果等。 2. 将所有事物链接在一起 正式描述:“超媒体被当作应用状态引擎(Hypermedia as the engine of application state)”。这个描述的核心是超媒体概念,换句话说:是链接的思想。 超媒体原则还有一个更重要的方面——应用“状态”。 简而言之,实际上服务器端(如果你愿意,也可以叫服务提供者)为客户端(服务消费者)提供一组链接,使客户端能通过链接将应用从一个状态改变为另一个状态。 只需要记住:链接是构成动态应用的非常有效的方式。 对此原则总结如下:任何可能的情况下,使用链接指引可以被标识的事物(资源)。也正是超链接造就了现在的Web。 3. 使用标准方法 在前两个原则的讨论中暗含着一个假设:接收URI的应用程序可以通过URI明确地做一些有意义的事情。 在HTTP中这被叫做动词(verb),除了两个大家熟知的(GET和POST)之外,标准方法集合中还包含PUT、DELETE、HEAD和OPTIONS。 你可以依此使用GET方法检索一个表述(representation)——也就是对资源的描述。 GET方法具有幂等性[译注:指多个相同请求返回相同的结果] 幂等性同样适用于PUT(基本的含义是“更新资源数据,如果资源不存在的话,则根据此URI创建一个新的资源”)和DELETE(你完全可以一遍又一遍地操作它,直到得出结论——删除不存在的东西没有任何问题)方法。 POST方法,通常表示“创建一个新资源”,也能被用于调用任意过程,因而它既不安全也不具有幂等性。 总结如下:为使客户端程序能与你的资源相互协作,资源应该正确地实现默认的应用协议(HTTP),也就是使用标准的GET、PUT、POST和DELETE方法。 4. 资源多重表述 资源多重表述还有着其它重要的好处:如果你为你的资源提供HTML和XML两种表述方式,那这些资源不仅可以被你的应用所用,还可以被任意标准Web浏览器所用。 总结:针对不同的需求提供资源多重表述。 5. 无状态通信 虽然REST包含无状态性(statelessness)的观念,但这并不是说暴露功能的应用不能有状态。 服务器端不能保持除了单次请求之外的,任何与其通信的客户端的通信状态。 这样做的最直接的理由就是可伸缩性—— 如果服务器需要保持客户端状态,那么大量的客户端交互会严重影响服务器的内存可用空间(footprint)。
|
|