Skip to content

RESTful 笔记

REST 是什么

REST 这个词是出自 Roy Thomas Fielding 的一篇论文,如果有兴趣了解,可以查阅 REST 相关章节

REST,并不是简单的四个字母,它是 Representational State Transfer 的缩写,可译为"表现层状态转化”。

看不懂没关系,在前面加一个 Resource,就可以很好的理解了:资源在网络中以某种表现形式进行状态转移

  • Resource

    这边的 Resource 指的就是我们的资源、数据等,可以用一个 URI(统一资源定位符)指向它,每种资源对应一个特定的 URI。要获取这个资源,访问它的 URI 就可以,因此 URI 就成了每一个资源的地址或独一无二的识别符。

  • Representational

    资源的表现形式,比如我们常见的:

    text
    数据:HTML 格式、XML 格式、JSON 格式、二进制格式等;
    
    图片:JPG格式、PNG格式等;

    具体表现形式,在 HTTP 请求的头信息中用 AcceptContent-Type 字段指定

  • State Transfer

    客户端和服务器的一个互动过程,势必涉及到数据和状态的变化。

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

RESTful API

遵守了 REST 原则的 API

特点

  • 每个 URL 表示一种资源
  • URL 语义清晰明确,不出现动词,只有名词复数(操作的动词是通过请求方式来表示)
  • 使用 HTTP 的方法来表示对资源的增删改查
    • GET(常用):从服务器上获取一个具体的资源或者一个资源列表。安全且幂等
    • POST(常用):在服务器上创建一个新的资源。不安全且不幂等
    • PUT(常用):以整体的方式更新服务器上的一个资源。不安全但幂等
    • DELETE(常用):删除服务器上的一个资源。不安全但幂等
    • PATCH:只更新服务器上一个资源的一个属性。
    • HEAD:获取一个资源的元数据,如数据的哈希值或最后的更新时间
    • OPTIONS:获取客户端能对资源做什么操作的信息。
  • 使用 HTTP 的状态来表示结果
    • 200 OK
    • 400 Bad Request
    • 500 Internal Server Error

幂等:无边际效应,多次操作得到相同的结果

简单来讲就是:

  1. Url 就知道要什么
  2. http method 就知道干什么
  3. http status code 就知道结果如何

优点

  • 透明性,暴露资源存在。
  • 充分利用 HTTP 协议本身语义。
  • 无状态,这点非常重要。在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度 HTTP。
  • 本身提供了丰富的内容协商手段,无论是缓存,还是资源修改的乐观并发控制,都可以以业务无关的中间件来实现。

  1. 理解 RESTful 架构
  2. RESTful API 编写指南
  3. 如何给老婆解释什么是 RESTful
  4. GitHub API
  5. Microsoft REST API Guidelines