REST的五个关键词

REST的五个关键词

要深入理解REST,需要理解REST的五个关键词:

  1. 资源(Resource)

  2. 资源的表述(Representation)

  3. 状态转移(State Transfer)

  4. 统一接口(Uniform Interface)

  5. 超文本驱动(Hypertext Driven)

资源

关于资源的理解在http://mengkang.net/620.html里已经说了很多了。

资源的表述

实际是资源暴露出来的展现形式,拿[GET]访问的请求来说就是通过浏览器访问某个地址之后所得到的内容。

状态转移

我所理解的,将客户端对资源操作的状态通过 Api 的请求转移到服务端。比如客户端需要删除某个资源,请求完,服务器端该资源的状态也是删除的了。

统一接口

REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。以HTTP/1.1协议为例,HTTP/1.1协议定义了一个操作资源的统一接口,主要包括以下内容:

  1. 7个HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS

  2. HTTP头信息(可自定义)

  3. HTTP响应状态代码(可自定义)

  4. 一套标准的内容协商机制(即接口内容输出之后,各个字段各个对象如何解析的定义)

  5. 一套标准的缓存机制

  6. 一套标准的客户端身份认证机制

超文本驱动

就像网页里的超链接,得到当前接口的返回内容,app 布局上对应的各个按钮下一步可能会请求 api 需要在当前 api 予以给出。

举个例子 https://developer.github.com/v3/git/commits/#get-a-commit 返回的内容为

  1. {

  2.   "sha""7638417db6d59f3c431d3e1f261cc637155684cd",

  3.   "url""https://api.github.com/repos/octocat/Hello-World/git/commits/7638417db6d59f3c431d3e1f261cc637155684cd",

  4.   "author": {

  5.     "date""2014-11-07T22:01:45Z",

  6.     "name""Scott Chacon",

  7.     "email""schacon@gmail.com"

  8.   },

  9.   "committer": {

  10.     "date""2014-11-07T22:01:45Z",

  11.     "name""Scott Chacon",

  12.     "email""schacon@gmail.com"

  13.   },

  14.   "message""added readme, because im a good github citizen\n",

  15.   "tree": {

  16.     "url""https://api.github.com/repos/octocat/Hello-World/git/trees/691272480426f78a0138979dd3ce63b77f706feb",

  17.     "sha""691272480426f78a0138979dd3ce63b77f706feb"

  18.   },

  19.   "parents": [

  20.     {

  21.       "url""https://api.github.com/repos/octocat/Hello-World/git/commits/1acc419d4d6a9ce985db7be48c6349a0475975b5",

  22.       "sha""1acc419d4d6a9ce985db7be48c6349a0475975b5"

  23.     }

  24.   ]

  25. }

里面的parents节点里有一个url字段,而对应的客户端上有一个查看其父节点的按钮,点击那个按钮,就会向这个url对应的api发送请求了。

下一步操作的执行,不是客户端需要自身关心的,而是api返回的文档内容驱动的。


个人觉得,这些标准实际在我们开发的时候无形中就实现并遵守了,就想数据库设计范式一样,不遵守,没法玩了。



回复列表



回复操作

正在加载验证码......

请先拖动验证码到相应位置