zoukankan      html  css  js  c++  java
  • 对REST的理解

    现在标准服务基本都提供REST化的接口了。为了加强对REST的理解,看了这篇文章:

    http://kb.cnblogs.com/page/186516/

    REST架构风格最重要的架构约束有6个:
    客户-服务器(Client-Server)
      通信只能由客户端单方面发起,表现为请求-响应的形式。
    无状态(Stateless)
      通信的会话状态(Session State)应该全部由客户端负责维护。
    缓存(Cache)
      响应内容可以在通信链的某处被缓存,以改善网络效率。
    统一接口(Uniform Interface)
      通信链的组件之间通过统一的接口相互通信,以提高交互的可见性。
    分层系统(Layered System)
      通过限制组件的行为(即,每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层。
    按需代码(Code-On-Demand,可选)
      支持通过下载并执行一些代码(例如Java Applet、Flash或JavaScript),对客户端的功能进行扩展。

     5个关键词

    要深入理解REST,需要理解REST的五个关键词:
    资源(Resource)
    资源的表述(Representation)
    状态转移(State Transfer)
    统一接口(Uniform Interface)
    超文本驱动(Hypertext Driven)

    详解:

    资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。
    
    资源的表述是一段对于资源在某个特定时刻的状态的描述。资源的表述可以有多种格式,例如HTML/XML/JSON/纯文本/图片/视频/音频等等。
    
    状态转移(state transfer)与状态机中的状态迁移(state transition)的含义是不同的。状态转移说的是:在客户端和服务器端之间转移(transfer)代表资源状态的表述。

    统一接口

    HTTP/1.1协议定义了一个操作资源的统一接口,主要包括以下内容:
    7个HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS
    HTTP头信息(可自定义)
    HTTP响应状态代码(可自定义)
    一套标准的内容协商机制
    一套标准的缓存机制
    一套标准的客户端身份认证机制
    “超文本驱动”又名“将超媒体作为应用状态的引擎”(Hypermedia As The Engine Of Application State,来自Fielding博士论文中的一句话,缩写为HATEOAS)。将Web应用看作是一个由很多状态(应用状态)组成的有限状态机。资源之间通过超链接相互关联,超链接既代表资源之间的关系,也代表可执行的状态迁移。

    6个主要特征

    一旦读者理解了上述REST的五个关键词,就很容易理解REST风格的架构所具有的6个主要特征:
    面向资源(Resource Oriented)
    可寻址(Addressability)
    连通性(Connectedness)
    无状态(Statelessness)
    统一接口(Uniform Interface)
    超文本驱动(Hypertext Driven)

    架构风格:

    从架构风格的抽象高度来看,常见的分布式应用架构风格有三种:
    分布式对象(Distributed Objects,简称DO)
      架构实例有CORBA/RMI/EJB/DCOM/.NET Remoting等等。
    远程过程调用(Remote Procedure Call,简称RPC)
      架构实例有SOAP/XML-RPC/Hessian/Flash AMF/DWR等等。
    表述性状态转移(Representational State Transfer,简称REST)
      架构实例有HTTP/WebDAV。
    REST与DO的差别在于:
    REST支持抽象(即建模)的工具是资源,DO支持抽象的工具是对象。
    REST与RPC的差别在于:
    REST支持抽象的工具是资源,RPC支持抽象的工具是过程。
    比较了三种架构风格之间的差别之后,从面向实用的角度来看,REST架构风格可以为Web开发者带来三方面的利益:
    简单性
      采用REST架构风格,对于开发、测试、运维人员来说,都会更简单。可以充分利用大量HTTP服务器端和客户端开发库、Web功能测试/性能测试工具、HTTP缓存、HTTP代理服务器、防火墙。这些开发库和基础设施早已成为了日常用品,不需要什么火箭科技(例如神奇昂贵的应用服务器、中间件)就能解决大多数可伸缩性方面的问题。
    
    可伸缩性
      充分利用好通信链各个位置的HTTP缓存组件,可以带来更好的可伸缩性。其实很多时候,在Web前端做性能优化,产生的效果不亚于仅仅在服务器端做性能优化,但是HTTP协议层面的缓存常常被一些资深的架构师完全忽略掉。
    
    松耦合
      统一接口+超文本驱动,带来了最大限度的松耦合。允许服务器端和客户端程序在很大范围内,相对独立地进化。对于设计面向企业内网的API来说,松耦合并不是一个很重要的设计关注点。但是对于设计面向互联网的API来说,松耦合变成了一个必选项,不仅在设计时应该关注,而且应该放在最优先位置。
    
    
    REST在互联网这个运行环境之中已经占据了统治地位,
    然而,在企业内网运行环境之中,REST还会面临DO、RPC的巨大挑战。
    特别是一些对实时性要求很高的应用,REST的表现不如DO和RPC。
    所以需要针对具体的运行环境来具体问题具体分析。
    
    但是,REST可以带来的上述三方面的利益即使在开发企业应用时,仍然是非常有价值的。所以REST在企业应用开发,特别是在SOA架构的开发中,已经得到了越来越大的重视。
  • 相关阅读:
    python 取整的两种方法
    django class-based view 考古
    django缓存基于类的视图
    MySQL参数优化案例
    django后台使用MySQL情况下的事务控制详解
    讲讲python“=”运算符上的优雅语法
    p标签不折行的问题
    django-TDD
    session 和 flask_session 实现原理(源码解析)
    网关地址和网关IP是什么,他们有什么关系?
  • 原文地址:https://www.cnblogs.com/charlesblc/p/5969104.html
Copyright © 2011-2022 走看看