建设本地网站,网站平台搭建要多少钱,关键词挖掘工具站,怎么样建设自己的网站2019独角兽企业重金招聘Python工程师标准 原文#xff1a;http://www.ruanyifeng.com/blog/2011/09/restful.html?20160826000527 越来越多的人开始意识到#xff0c;网站即软件#xff0c;而且是一种新型的软件。 这种互联网软件采用客户端/服务… 2019独角兽企业重金招聘Python工程师标准 原文http://www.ruanyifeng.com/blog/2011/09/restful.html?20160826000527 越来越多的人开始意识到网站即软件而且是一种新型的软件。 这种互联网软件采用客户端/服务器模式建立在分布式体系上通过互联网通信具有高延时high latency、高并发等特点。 网站开发完全可以采用软件开发的模式。但是传统上软件和网络是两个不同的领域很少有交集软件开发主要针对单机环境网络则主要研究系统之间的通信。互联网的兴起使得这两个领域开始融合现在我们必须考虑如何开发在互联网环境中使用的软件。 二、名称 Fielding将他对互联网软件的架构原则定名为REST即Representational State Transfer的缩写。我对这个词组的翻译是表现层状态转化。 如果一个架构符合REST原则就称它为RESTful架构。 要理解RESTful架构最好的方法就是去理解Representational State Transfer这个词组到底是什么意思它的每一个词代表了什么涵义。如果你把这个名称搞懂了也就不难体会REST是一种什么样的设计。 三、资源Resources REST的名称表现层状态转化中省略了主语。表现层其实指的是资源Resources的表现层。 所谓资源就是网络上的一个实体或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务总之就是一个具体的实在。你可以用一个URI统一资源定位符指向它每种资源对应一个特定的URI。要获取这个资源访问它的URI就可以因此URI就成了每一个资源的地址或独一无二的识别符。 所谓上网就是与互联网上一系列的资源互动调用它的URI。 四、表现层Representation 资源是一种信息实体它可以有多种外在表现形式。我们把资源具体呈现出来的形式叫做它的表现层Representation。 比如文本可以用txt格式表现也可以用HTML格式、XML格式、JSON格式表现甚至可以采用二进制格式图片可以用JPG格式表现也可以用PNG格式表现。 URI只代表资源的实体不代表它的形式。严格地说有些网址最后的.html后缀名是不必要的因为这个后缀名表示格式属于表现层范畴而URI应该只代表资源的位置。它的具体表现形式应该在HTTP请求的头信息中用Accept和Content-Type字段指定这两个字段才是对表现层的描述。 五、状态转化State Transfer 访问一个网站就代表了客户端和服务器的一个互动过程。在这个过程中势必涉及到数据和状态的变化。 互联网通信协议HTTP协议是一个无状态协议。这意味着所有的状态都保存在服务器端。因此如果客户端想要操作服务器必须通过某种手段让服务器端发生状态转化State Transfer。而这种转化是建立在表现层之上的所以就是表现层状态转化。 客户端用到的手段只能是HTTP协议。具体来说就是HTTP协议里面四个表示操作方式的动词GET、POST、PUT、DELETE。它们分别对应四种基本操作GET用来获取资源POST用来新建资源也可以用于更新资源PUT用来更新资源DELETE用来删除资源。 六、综述 综合上面的解释我们总结一下什么是RESTful架构 1每一个URI代表一种资源 2客户端和服务器之间传递这种资源的某种表现层 3客户端通过四个HTTP动词对服务器端资源进行操作实现表现层状态转化。 七、误区 RESTful架构有一些典型的设计误区。 最常见的一种设计错误就是URI包含动词。因为资源表示一种实体所以应该是名词URI不应该有动词动词应该放在HTTP协议中。 举例来说某个URI是/posts/show/1其中show是动词这个URI就设计错了正确的写法应该是/posts/1然后用GET方法表示show。 如果某些动作是HTTP动词表示不了的你就应该把动作做成一种资源。比如网上汇款从账户1向账户2汇款500元错误的URI是 POST /accounts/1/transfer/500/to/2 正确的写法是把动词transfer改成名词transaction资源不能是动词但是可以是一种服务 POST /transaction HTTP/1.1 Host: 127.0.0.1 from1to2amount500.00 另一个设计误区就是在URI中加入版本号 http://www.example.com/app/1.0/foo http://www.example.com/app/1.1/foo http://www.example.com/app/2.0/foo 因为不同的版本可以理解成同一种资源的不同表现形式所以应该采用同一个URI。版本号可以在HTTP请求头信息的Accept字段中进行区分参见Versioning REST Services Accept: vnd.example-com.foojson; version1.0 Accept: vnd.example-com.foojson; version1.1 Accept: vnd.example-com.foojson; version2.0 完 转载于:https://my.oschina.net/liujiest/blog/738068