一、RESTful是个啥?
RESTful是一种软件架构风格、设计风格,只是提供了一组设计原则和约束条件。
二、对比传统方式
RESTful风格和传统方式主要体现在URI和请求方法上。
传统方式 | RESTful风格 | |
---|---|---|
查询 | GET /user/query?name=zhangsan | GET /user?name=zhangsan |
详情 | GET /user/getInfo?id=1 | GET /user/1 |
创建 | POST /user/create | POST /user |
修改 | POST /user/update | PUT /user/1 |
删除 | GET /user/delete?id=1 | DELETE /user/1 |
1、用URI描述资源。
2、使用HTTP方法描述行为。使用HTTP状态码来表示不同的结果。
3、使用json作为数据交互格式。
GET,DELETE,PUT和POST的典型用法:
GET
-
安全且幂等
-
获取表示
-
变更时获取表示(缓存)
-
200(OK) - 表示已在响应中发出
-
204(无内容) - 资源有空表示
-
301(Moved Permanently) - 资源的URI已被更新
-
303(See Other) - 其他(如,负载均衡)
-
304(not modified)- 资源未更改(缓存)
-
400 (bad request)- 指代坏请求(如,参数错误)
-
404 (not found)- 资源不存在
-
406 (not acceptable)- 服务端不支持所需表示
-
500 (internal server error)- 通用错误响应
-
503 (Service Unavailable)- 服务端当前无法处理请求
POST
-
不安全且不幂等
-
使用服务端管理的(自动产生)的实例号创建资源
-
创建子资源
-
部分更新资源
-
如果没有被修改,则不过更新资源(乐观锁)
-
200(OK)- 如果现有资源已被更改
-
201(created)- 如果新资源被创建
-
202(accepted)- 已接受处理请求但尚未完成(异步处理)
-
301(Moved Permanently)- 资源的URI被更新
-
303(See Other)- 其他(如,负载均衡)
-
400(bad request)- 指代坏请求
-
404 (not found)- 资源不存在
-
406 (not acceptable)- 服务端不支持所需表示
-
409 (conflict)- 通用冲突
-
412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
-
415 (unsupported media type)- 接受到的表示不受支持
-
500 (internal server error)- 通用错误响应
-
503 (Service Unavailable)- 服务当前无法处理请求
PUT
-
不安全但幂等
-
用客户端管理的实例号创建一个资源
-
通过替换的方式更新资源
-
如果未被修改,则更新资源(乐观锁)
-
200 (OK)- 如果已存在资源被更改
-
201 (created)- 如果新资源被创建
-
301(Moved Permanently)- 资源的URI已更改
-
303 (See Other)- 其他(如,负载均衡)
-
400 (bad request)- 指代坏请求
-
404 (not found)- 资源不存在
-
406 (not acceptable)- 服务端不支持所需表示
-
409 (conflict)- 通用冲突
-
412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
-
415 (unsupported media type)- 接受到的表示不受支持
-
500 (internal server error)- 通用错误响应
-
503 (Service Unavailable)- 服务当前无法处理请求
DELETE
-
不安全但幂等
-
删除资源
-
200 (OK)- 资源已被删除
-
301 (Moved Permanently)- 资源的URI已更改
-
303 (See Other)- 其他,如负载均衡
-
400 (bad request)- 指代坏请求
-
404 (not found)- 资源不存在
-
409 (conflict)- 通用冲突
-
500 (internal server error)- 通用错误响应
-
503 (Service Unavailable)- 服务端当前无法处理请求
三、REST成熟度模型
原文https://martinfowler.com/articles/richardsonMaturityModel.html
将REST成熟度从低到高分为4级(level0-level3):
1、Level 0:使用http作为传输方式。
2、Level 1:引入资源概念,每个资源都有对应的URI。
3、使用HTTP方法进行不同的操作,使用HTTP状态码来表示不同的结果。
4、使用超媒体。在资源的表达中包含了连接信息。
一般情况下,达成Level2就可以了。