由来
Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"。如果一个架构符合REST原则,就称它为RESTful架构。
元素
- 资源(Resources)
- 表现层(Representation)
- 状态转化(State Transfer)
结论
- 每一个URI代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
对于资源的具体操作类型,由HTTP动词表示。
1.常用的HTTP动词有下面五个(括号里是对应的SQL命令)
- GET(SELECT):从服务器取出资源(一项或多项)。
- POST(CREATE):在服务器新建一个资源。
- PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
- PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
- DELETE(DELETE):从服务器删除资源。
- 还有两个不常用的HTTP动词。
- HEAD:获取资源的元数据。
- OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。
例子
- GET /zoos:列出所有动物园
- POST /zoos:新建一个动物园
- GET /zoos/ID:获取某个指定动物园的信息
- PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
- PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
- DELETE /zoos/ID:删除某个动物园
- GET /zoos/ID/animals:列出某个指定动物园的所有动物
- DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
2.宾语:表示动作的目标对象
是一个名词
// 推荐
GET /users
// 不推荐
GET /getUsers开课吧web全栈架构师
通常是复数
// 推荐
GET /users
GET /users/1
// 不推荐
GET /user
GET /user/1
避免多级
// 推荐
GET /authors/12?categories=2
// 不推荐
GET /authors/12/categories/2
返回结果
针对不同操作,服务器向用户返回的结果应该符合以下规范。
- GET /collection:返回资源对象的列表(数组)
- GET /collection/resource:返回单个资源对象
- POST /collection:返回新生成的资源对象
- PUT /collection/resource:返回完整的资源对象
- PATCH /collection/resource:返回完整的资源对象
- DELETE /collection/resource:返回一个空文档
状态码
状态码要精确:
- 1xx :相关信息
- 2xx :操作成功
- 3xx :重定向
- 4xx :客户端错误
- 5xx :服务器错误
调用方式
methods: {
async post() {
const res = await axios.post("/users", this.form);
},
async get() {
const res = await axios.get("/users");
},
async put() {
const res = await axios.put("/users", this.form);
},
async del() {
const res = await axios.delete("/users/3");
},
}