`

REST无状态的理解

    博客分类:
  • REST
 
阅读更多

Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"。

降低开发的复杂性,提高系统的可伸缩性

  • 资源
  • 表现层
  • 状态转化

 

资源

REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。

 

表现层(Representation)

URI只代表资源的实体,不代表它的形式。严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。

 

状态转化(State Transfer)

互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。

就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

 

几种误区

最常见的一种设计错误,就是URI包含动词--》 /posts/show/1,正确的写法应该是/posts/1,然后用GET方法表示show。

资源不能是动词,但是可以是一种服务

 

POST /accounts/1/transfer/500/to/2 --》

 

POST /transaction HTTP/1.1
  from=1&to=2&amount=500.00

 

 

为什么在请求中传递SessionID被普遍认为是unRESTful的,而将用户的credentials包含在每个请求里又是一种非常RESTful的做法

 

无状态指的是任意一个Web请求必须完全与其他请求隔离,当请求端提出请求时,请求本身包含了相应端为相应这一请求所需的全部信息。

 

RESTful架构对于state的两个不同的解释: 应用状态(Application State)资源状态(Resource State)

  • 应用状态:指的是与某一特定请求相关的状态信息
  • 资源状态:则反映了某一存储在服务器端资源在某一时刻的特定状态,该状态不会因为用户请求而改变,任何用户在同一时刻对该资源的请求都会获得这一状态的表现(Representation)。

RESTful架构要求服务器端不保有任何与特定HTTP请求相关的资源,所以应用状态必须由请求方在请求过程中提供。

 

在Session ID可以被认为是一个用来标识某一会话状态的Key,将其传递给服务器端意味着这样一个请求:“请帮我取出这个状态信息”,也就是说这个请求假设响应方保有着状态信息。由于与某一特定请求相关的状态属于应用状态,而RESTful架构要求任何此类状态由请求方负责提供,所以传递Session ID被认为是unRESTful的做法。反过来,user credential作为一种应用状态,是被期望由请求方提供的,所以在请求中传递user credentials(姑且忽略安全性问题)是符合RESTful架构规范的。

 

参考:http://developer.51cto.com/art/200906/129424.htm

分享到:
评论

相关推荐

    用WCFWebAPI在MVC3.0下实现REST

    最初开始接触web service的时候,所有的材料上来就是一大堆的名词,SOAP, WSDL,看得头都要大了,后来提出来的REST就容易理解得多,虽然目前SOAP在企业级的web service中还有一席之地,但是在公共的Internet上,不是...

    REST_cn 中文版

    然后我介绍了表述性状态转移(Representational State Transfer,REST)的架构风格,并且描述了如何使用REST来指导现代Web架构的设计和开发。 REST强调组件交互的可伸缩性、接口的通用性、组件的独立部署、以及用来...

    白话REST-识别真假REST

    REST是中文翻译为表征状态转移(英文:Representational State Transfer)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。从字面意思来说,“表述”是很难理解是什么东西的?从论文上我们可以...

    使用 JAX-RS 简化 REST 应用开发

    REST 是英文 Representational State Transfer 的缩写,有中文翻译为“具象状态传输”。REST 这个术语是由 Roy Fielding 在他的博士论文 《 Architectural Styles and the Design of Network-based Software ...

    rest框架cetia4的教程

    对于Web服务类应用,不使用HTTP Session,基于无状态服务器模型做开发。 3. 自身包括了对于Web MVC的支持,熟悉Web MVC框架的开发者很容易理解。还内建了参数映射、参数验证等等传统Web MVC框架所支持的功能。 4. ...

    show_rest:使用 node express 显示 rest api

    Show Rest 准备 ...什么是REST? RESTful架构,就是目前最流行...REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。 四、表现层(Representation) "资源"是一种信息实体,它

    rest-api-description:GitHub REST API的OpenAPI描述

    GitHub的REST API OpenAPI说明该存储库包含描述。什么是OpenAPI?根据: OpenAPI规范(OAS)为HTTP API定义了标准的,与编程语言无关的接口描述,使人和计算机都可以发现和理解服务的功能,而无需访问源代码,其他...

    ASP EXCEL导入SQL

     由于REST本身无状态的特性,361CRM平台天然就是分布式的,决定了后台通过根据业务量而弹性地增加服务器就可以实现平台计算能力的线性增加;  所有的请求都是统一通过RESTAPI进行相应的资源与服务的请求,这样就...

    prestans:符合WSGI的REST微框架

    从2021年1月起,prestans不再处于活跃状态。 prestans背后的目的是在Python中引入轻量级,易于理解的RESTful服务开发。 现在,这个差距被更多具有更好性能和更现代方法的框架所填补。 我们的团队感谢您在项目中使用...

    boot-rest-api-interview-master

    Java面试分配 Spring Boot应用程序将由我们的候选人用于实现面试分配。...AVAILABLE 我可以删除自己的帐户很高兴有: 候选人展示以下内容将是一个优势: 正确使用Http方法和REST实践对理解对设计模式的理解了解TDD和B

    架构风格与基于网络的软件架构设计

    这篇论文定义了一个框架,致力于通过架构风格来理解软件架构,并且...然后 我介绍了表述性状态转移(Representational State Transfer,REST)的架构风格,并且描述了 如何使用 REST 来指导现代 Web 架构的设计和开发。

    架构风格与基于网络的软件架构设计(Restful API)-中英文

    web之父的博士论文,Restful API的最佳描述。这篇论文定义了一个框架,...然后我介绍了表述性状态转移(Representational State Transfer,REST)的架构风格,并且描述了如何使用REST来指导现代Web架构的设计和开发。

    使用Node.js实现RESTful API的示例

    在REST服务中,应用程序状态和功能可以分为各种资源。资源向客户端公开,客户端可以对资源进行增删改操作。资源的例子有:应用程序对象、数据库记录、算法等等。 REST通过抽象资源,提供了一个非常容易理解和使用的...

    05-web开发系列图书27-33.doc

    理解JavaScript函数为何具有状态;实现JavaScript “Generics”;使用代码块;使用函数进行判断决策;实现代理、委托、mixin和重载函数;创建和测试动态内容等。后半部分则偏重于实际项目,包括实现一个完整的Ajax和...

    Yii2框架制作RESTful风格的API快速入门教程

    REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:”我...

    CentOS解决服务器存在大量time_wait的问题

    近期服务器出现大量time_wait的TCP连接造成服务器连接数过多而最终导致tomcat假死状态。连接服务器查看连接数的时候提示如下。 [root@test apache-tomcat-7.0.53]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a...

    RESTFul架构详解

    REST全称是RepresentationalStateTransfer,中文意思是表述性状态转移。它首次出现在2000年RoyFielding的博士论文中,RoyFielding是HTTP规范的主要编写者之一。他在论文中提到:“我这篇文章的写作目的,就是想在符合...

Global site tag (gtag.js) - Google Analytics