理解RESTful架构

关于这个话题,读过最好的中文资料是阮一峰老师博客上的这篇文章

以下做些摘录,方便自己查看,想理解RESTful架构架构,建议翻阅上头的文章。


解决什么问题

  • 网站即软件
  • 这种"互联网软件"具有高延时(high latency)、高并发等特点。
  • RESTful架构,就是目前最流行的一种互联网软件架构

顾名思义

  • REST,即Representational State Transfer的缩写。阮一峰老师对这个词组的翻译是表现层状态转化。如果一个架构符合REST原则,就称它为RESTful架构。
  • 要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组到底是什么意思,它的每一个词代表了什么涵义。

逐词分析

资源(Resources)

  • REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。
  • 所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。
  • "资源"是具体的实在。你可以用一个URI(统一资源定位符)指向它
  • 注:uri是定位关键,在后端视角来看(django-restful-framework),框架要把资源(数据)映射到uri(url)上
  • 注2:资源可能是分布式的,使用超链接来连接它们

表现层(Representation)

  • "资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。
  • 而URI应该只代表"资源"的位置。它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。

状态转化(State Transfer)

  • 访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。
  • 互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。
  • HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

综述

  • 每一个URI代表一种资源;
  • 客户端和服务器之间,传递这种资源的某种表现层;
  • 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

误区

  • 最常见的一种设计错误,就是URI包含动词. "资源"表示一种实体,所以应该是名词,URI不应该有动词,动词应该放在HTTP协议中。



Fork me on GitHub