要深入理解REST,需要理解REST的五个关键词:
资源(Resource)
资源的表述(Representation)
状态转移(State Transfer)
统一接口(Uniform Interface)
超文本驱动(Hypertext Driven)
关于资源的理解在http://mengkang.net/620.html里已经说了很多了。
实际是资源暴露出来的展现形式,拿[GET]访问的请求来说就是通过浏览器访问某个地址之后所得到的内容。
我所理解的,将客户端对资源操作的状态通过 Api 的请求转移到服务端。比如客户端需要删除某个资源,请求完,服务器端该资源的状态也是删除的了。
REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。以HTTP/1.1协议为例,HTTP/1.1协议定义了一个操作资源的统一接口,主要包括以下内容:
7个HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS
HTTP头信息(可自定义)
HTTP响应状态代码(可自定义)
一套标准的内容协商机制(即接口内容输出之后,各个字段各个对象如何解析的定义)
一套标准的缓存机制
一套标准的客户端身份认证机制
就像网页里的超链接,得到当前接口的返回内容,app 布局上对应的各个按钮下一步可能会请求 api 需要在当前 api 予以给出。
举个例子 https://developer.github.com/v3/git/commits/#get-a-commit 返回的内容为
|
里面的parents
节点里有一个url
字段,而对应的客户端上有一个查看其父节点的按钮,点击那个按钮,就会向这个url
对应的api
发送请求了。
下一步操作的执行,不是客户端需要自身关心的,而是api
返回的文档内容驱动的。
个人觉得,这些标准实际在我们开发的时候无形中就实现并遵守了,就想数据库设计范式一样,不遵守,没法玩了。