RESTful接口风格

149 阅读2分钟

由来

Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"。如果一个架构符合REST原则,就称它为RESTful架构。

元素

  • 资源(Resources)
  • 表现层(Representation)
  • 状态转化(State Transfer)

结论

  1. 每一个URI代表一种资源;
  2. 客户端和服务器之间,传递这种资源的某种表现层;
  3. 客户端通过四个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"); 
    }, 
}