REST 学习笔记

       之前做一个网盘客户端项目的时候,接触过REST API,对于REST这个东西一直处于知其然,而不知其所以然的状态,所以,今天找了一些资料,做了进一步的了解。

       REST的由来和现状:
       REST中文译名“描述状态转移“,或者”表征状态转移”,是由Roy Fielding博士在2000年,于自己的博士论文中提出来的一个软件架构风格。
       目前,Web服务的三种主流实现方案:REST, SOAP,XML-RPC中,REST相对其他两种方式更加简洁,所以,正变得越来越流行,Amazon、雅虎等企业也纷纷推出了REST风格的web服务。
         
       REST的宗旨:
       REST从资源的角度来观察整个网络。以URI来表示网络上的资源,客户端的应用以URI作为钥匙来访问这些资料。
       客户端不断的获取网络资源,每一次获取到的资源不断的改变客户端状态(客户端表现给用户的界面?),这就是所谓的“表征状态转移( Representational State Transfer)“。其实关于这个定义,我一直觉得可以理解,

       REST的要点及标准
       REST是设计风格或者说思想,为非标准和规范。理论上来说,REST并不限定于平台和环境,但实际上,REST普遍基于HTTP协议,用于Web服务的开发和设计。
       1. REST以URI为核心概念,以资源为根本。
       2. 以HTTP的GET、POST、PUT和DELETE方法,进行资源的操作。
       3. 通过资源的表现形式(URI?)来操作资源。
       4. 资源多重表述,可以是HTML(当客户端为浏览器),也可以是XML,JSON(当客户端为app)。

        REST的要求:
        1. 客户端和服务器结构(C/S,B/S)
        2. 连接协议具有无状态性(非常适合HTTP的短连接模型)
        3. 更够利用Cache机制增进性能(主要针对GET请求)
        4. 层次化的系统(uri比较利于层次的体现)
        5. 随需代码-javascript(不太理解)

        PS:因为REST的连接是无状态的,所以,这就要求我们调用API的时候需要提供状态信息,例如token。

         REST的优点:
         1. 可以使用cache提高响应速度
         2. 连接的无状态行,本身有助于分布式的服务器架构,提高服务器扩展性
         3. 基于HTTP协议的实现,有助于更多的客户端来访问服务,让服务发挥更多的价值,也可以简化客户端的开发,仅用浏览器就可以满足需求
         4. 相对与其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
         5. 不需要额外的资源发现机制
         6. 在软件技术演进中的长期兼容性更好

         REST的缺点:
         1. 采用HTTP协议,欠缺服务器端发起通知的能力
         2. 服务器端需要在内存中保存会话状态,由于服务器间共享内存能力欠缺妨碍了通过添加节点来提高系统吞吐量和服务质量的可行性。(通过NoSql等高性能存储来实现cache可能解决这个问题)
         3. HTTP的GET、PUSH、POST、DELETE命令不足以承担越来越丰富的应用需求。
         4."HTTP合并了应用层和传输层的状态码(如,304 Not Modified[未修改]和400 Bad Request[无效请求];407 Proxy Authentication Required[需要代理认证]和502 Bad Gateway[无效网关])。 REST在另一个协议上的实现应该更清晰地隔离应用层协议和传输层协议。HTTP承担了双份工作,因此其结果也往往不尽完美。"(Ganesh说的,我不太懂)

PS: 其实,REST本身并不存在缺点,但是实际应用中的确存在上述问题,而原因的都是由承载REST的下层机制存在(如HTTP)造成的。
         
         一些技术要点:
         GET 方法具有安全性,幂等性
         PUSH、DELETE 方法具有幂等性
         POST 不具有幂等性(实际操作中,开发者也可以为POST请求实现幂等性,例如为同一个请求添加相同的id、nonce)

         安全性:无论API调用多少次,都不会对服务器上的数据产生影响,多为只读性API。
         幂等性:在API执行成功的情况下,相同的请求执行一次和多次具有相同的效果,例如无论id=xxx的文件delete几次,服务器上都一致的(删除不存在的文件为空操作)。


参考资料:
REST wiki解释
HTTP 幂等性概念和应用
REST 的缺点是什么?
         
         

你可能感兴趣的:(REST 学习笔记)