【Restful】Restful风格Demo
(1)基本介绍
在web开发中,提交请求和接收请求,method常用的是 get 和 post,用了Restful风格后,method还可以是 put 和 delete 等等其他值。
既然 method 足够丰富,那么 url 就没有必要那么复杂了,可以考虑使用同一个 url,但是约定使用不同的 method 接收就实施不同的业务,最常见的就是CRUD操作。
RESTful API 可以你看到 url + http method 就知道这个 url 是干什么的,让你看到了 http 状态码(status code)就知道请求结果如何。
(2)Restful风格和普通风格的区别
CRUD如下表所示,URL就都使用一样的 “/categories”,区别只是在于method不同,服务器根据method的不同来判断浏览器期望做的业务行为
(2.1)增的区别
(2.1.1)add的普通风格
发送请求,action传出的 url 路径是 /save,用的 method 是 post
接收请求,根据路径 save 匹配控制器
(2.1.2)add的Restful风格
发送请求,action传出的 url 路径是 /accounts,用的 method 是 post
接收请求,根据 accounts 匹配控制器,指明使用的 method 为 POST 进行处理,这里 POST 表示“add增加”
(2.2)删的区别
(2.2.1)delete的普通风格
发送请求,action 传出的 url 路径是 /deleteAccount接收请求,根据路径 deleteAccount 匹配控制器
(2.2.2)delete的Restful风格
发送请求,href 传出的 url 路径还是 /accounts
接收请求,根据 accounts 匹配控制器,指明使用的 method 为 DELETE 进行处理,这里 DELETE 表示“delete删除”
(2.3)改的区别
(2.3.1)edit的普通风格
发送请求,href 传出的 url 路径是 /editAccount
接收请求,根据路径 editAccount 匹配控制器
(2.3.2)edit的Restful风格
发送请求,action 传出的 url 路径是 /accounts
接收请求,根据 accounts 匹配控制器,指明使用的 method 为 GET 和 PUT 进行处理,这里 GET 表示检索,PUT 表示“update更新”
(2.4)查的区别
(2.4.1)select的普通风格
发送请求,action传出的 url 路径是 /findAll
接收请求,根据路径 findAll 匹配控制器
(2.4.2)select的Restful风格
发送请求,action传出的 url 路径是 /accounts
接收请求,根据 accounts 匹配控制器,指明使用的 method 为 GET 进行处理,这里 GET 表示“select查询”
(3)REST 接口规范的总结
(3.1)动作
- GET :请求从服务器获取特定资源。举个例子:GET /classes(获取所有班级)
- POST :在服务器上创建一个新的资源。举个例子:POST /classes(创建班级)
- PUT :更新服务器上的资源(客户端提供更新后的整个资源)。举个例子:PUT /classes/12(更新编号为 12 的班级)
- DELETE :从服务器删除特定的资源。举个例子:DELETE /classes/12(删除编号为 12 的班级)
(3.2)路径(接口命名)
GET /classes:列出所有班级
POST /classes:新建一个班级
GET /classes/classId:获取某个指定班级的信息
PUT /classes/classId:更新某个指定班级的信息(一般倾向整体更新)
PATCH /classes/classId:更新某个指定班级的信息(一般倾向部分更新)
DELETE /classes/classId:删除某个班级
GET /classes/classId/teachers:列出某个指定班级的所有老师的信息
GET /classes/classId/students:列出某个指定班级的所有学生的信息
DELETE classes/classId/teachers/ID:删除某个指定班级下的指定的老师的信息
(3.3)过滤信息(Filtering)
如果我们在查询的时候需要添加特定条件的话,建议使用 url 参数的形式。比如我们要查询 state 状态为 active 并且 name 为 guidegege 的班级:
GET /classes?state=active&name=guidegege
比如我们要实现分页查询:
GET /classes?page=1&size=10 //指定第1页,每页10个数据