REST自学总结


  • cid:41:privileges:topics:read

    上一篇我以一个脑洞展开的形式着重描述了一下什么是架构和架构风格,并简单的说了一下什么是REST。这一篇让我重点总结一下自己对于REST的认知。

    REST这个概念出自HTTP的编写者之一的Roy Fielding的博士论文。基于Web的成功,Fielding在他的论文Architectural Styles and the Design of Network-based Software Architectures中总结提炼了一套对于基于网络的软件的设计评估方法,其核心即为架构风格,并从“空”风格开始推导出了REST这种分布式超媒体系统的架构风格。实际上,REST就是Web自身的架构风格(毕竟REST是从Web的成功之中总结出来的)。满足REST约束条件的系统就是RESTful的。

    如上一篇所提到的,REST有五个必要的约束:
    1. REST是一个C/S架构
    2. 无状态

    • 服务器不包含客户状态
    • 每一个客户请求包含完成请求所需的信息
    • 会话状态由客户端记录

    3. 可缓存

    • 服务器的响应是可以被缓存的,提高网络效率

    4. 统一接口:

    • 定义客户与服务端之间的接口- HTTP动词:PUT、GET、POST、DELETE,HTTP响应:status、body。(如果使用的是HTTP的话,实现RESTful并不一定要用HTTP)

    5. 层次化的系统

    • 客请求时并不知道访问的是谁,获取的回复是缓存还是取自数据库
    • 客服务端之间有软硬件中间层(提升可扩展性)

    除此以外,REST还有一个重要的相关概念:资源
    Fielding在论文中提到“REST对于信息的核心抽象是资源”。REST将提供的服务和信息抽象为资源,资源通过URI来定位识别、通过统一的接口被操作(HTTP动词:GET、POST等,如果使用的是HTTP的话)。因此,REST又被称为是Resource-Based的风格。
    Representational State Transfer中的Representation(资源表现/资源表述)是资源在特定时刻的状态/表现形式,可以在服务器和客户端之间传递。举个例子,在线购物网站的一个特定商品是一个资源,关于商品的信息可以在不同情况下呈现出不同形式:在分类商品列表中只有名字和图片,而点击进入商品页面后有更详细的关于商品的介绍。
    State Transfer按照我个人的理解似乎包含了几种含义:1. 服务器上的资源被删改时状态发生转移;2. 根据Fielding所说的HATEOAS(Hypermedia As The Engine Of Application State,将超媒体作为应用状态的引擎),用户所使用的资源被作为用户的状态,当用户通过URI在资源间切换时用户的状态发生改变;3. 用户请求资源时,资源的状态在服务端和客户端之间被转移。
    (我并不是很确定哪种理解更贴近Fielding的本意,欢迎高人指点。)

    REST的要点总结一下,大概有这么几条:
    REST是C/S架构,服务器端不保存状态(session),客户端自行保存应用状态并在每次请求时向服务器提供执行请求的足够信息。无状态可以减轻服务器压力,并使得服务器响应可以被缓存以此提升系统性能。
    REST使用统一接口,HTTP是常见的RESTful实现方式但并不是必要的。如果使用HTTP协议,则使用HTTP动词(GET,PUT,DELETE,POST等)以及URI来对资源进行操作。统一接口的一个明显的好处是支持跨平台(PC、iOS,Android)。
    层次化系统和无状态使得RESTful系统拥有更好的扩展性。

    以上就是到目前为止我自己对于REST理解的一个简要总结。REST内涵丰富,我的个人经验有限、表达方式可能也不够清晰,请大家见谅。如有不正确的地方恳请指出,也希望大家分享自己对于REST和RESTful的认知。
    PS:关于如何解决登录/authentication的问题,可以参考一下这一篇博文后半段关于RESTful设计的部分:http://www.cnblogs.com/loveis715/p/4669091.html

    参考链接:






    https://en.wikipedia.org/wiki/Representational_state_transfer
    http://kb.cnblogs.com/page/186516/
    http://www.zhihu.com/question/27785028
    http://www.cnblogs.com/loveis715/p/4669091.html
    http://kb.cnblogs.com/page/539160/


登录后回复
 

与 BitTiger Community 的连接断开,我们正在尝试重连,请耐心等待