什么是RESTful
概念:REST是Representational State Transfer 的缩写,直译就是表现层状态转化。 这里听起来可能有点奇怪,因为省略了重要的主语Resources 资源,资源在变现层的状态转化。
资源:就是网络上的一个实体,网络上的一个具体信息。可以是一段文本,一张图片,一首歌曲,一种服务。用一个uri指向它,URI成了每一个资源的地址或独一无二的识别符。
URI 表示一个资源
HTTP METHOD 表示对资源的操作
HTTP STATUS CODE 表示操作的结果
如果一个架构符合REST原则,就称它为RESTful架构。
状态转化
互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。
客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。
总结一下什么是RESTful架构:
- 每一个URI代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
设计流程
- 确定一个API提供什么类型的资源
- 确定资源之间的依赖关系
- 基于类型和依赖关系确定资源的命名
- 确定资源的结构
- 为资源添加最少的方法
Resource Names
资源是一个实体对象,那么资源名就是这个资源的标识。
一个资源名应该由API Service,Collection ID 和 Resource ID名组成。
例1:存储服务有 buckets 的集合,其中每个桶包含一个 objects 集合。
例2:电子邮件服务用户的集合。sub-resource 每个用户都有一个设置,设置 sub-resource 有许多其他的子资源,包括 customFrom:
全名://gateway.com.cn/storage/buckets/1/materials/wood
相对名:buckets/1/materials/wood
HTTP URL:http://gateway.com.cn/storage/v1/buckets/1/materials/wood
Resource ID
- Resource ID 标识着资源属于父资源中。
- Resource ID 可能不止一个单词,也有可能是一个相对路径。
- Resource ID 必须清楚地被记录,无论是客户端,服务器,或第三方。
Collection ID
-
Collection ID 必须是有效的程序标识符。
-
Collection ID 必须是驼峰形式的复数结构,如果没有复数形式,应使用单数。为什么用复数,应为资源往往不会只有一个,而是有很多个。
-
Collection ID 必须是清晰简洁的英文单词。
-
Collection ID 避免使用笼统的表示,例如objects、values、types。
Action 命名规范
基本规范
- 使用”/“表示层级关系
- url 不能以”/“结尾
- url 中不能包含空格””
- url 中不能以文件后缀结尾
- url 中字母小写,单词间加下划线
- 不要再url中添加CRUD
类别