RESTful 是一种接口设计风格,充分利用了 HTTP 方法的语义。
一句话概括:看 URI 就知道要什么资源,看 http method 就知道要干什么,看 http status code 就知道结果如何。
RESTful 的特点:
-
统一接口:RESTful 架构风格规定,数据的元操作(即增删改查),分别对应于 HTTP 方法,这样就统一了数据操作的接口,仅通过 HTTP 方法,就可以完成对数据的所有增删查改工作。
- GET 用来获取资源,是幂等且安全的,一般使用 200 表示操作成功。
- POST 用来新建资源,不幂等不安全,一般使用 201 表示对象创建成功。
- PUT 用来更新资源,是幂等但不安全的,一般使用 204 表示操作已经执行成功,但是没有返回数据。
- DELETE 用来删除资源,是幂等但不安全的,一般使用 204 表示操作已经执行成功,但是没有返回数据。
幂等性:对同一 RESTful 接口的多次访问,得到的资源状态是相同的。
安全性:对该 RESTful 接口访问,不会使服务器端资源的状态发生改变。 -
无状态:所有的资源都可以通过 URI 定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。
有状态和无状态的区别,举个简单的例子说明一下。如查询员工的工资,如果查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,则这种情况是有状态的,因为查询工资的每一步操作都依赖于前一步操作,只要前置操作不成功,后续操作就无法执行;如果输入一个 ur l即可得到指定员工的工资,则这种情况是无状态的,因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个 url 与之对应,可以通过 HTTP 中的 GET 方法得到资源,这是典型的 RESTful 风格。
接口设计技巧:
- URI 中使用名词而不是动词,且推荐使用复数。
// BAD /getProduct // GOOD /products
- 使用
_
或-
来让 URI 可读性更好。例如:http://www.oschina.net/news/38119/oschina-translate-reward-plan
。
接口示例:
传统 URL 请求格式:
GET http://127.0.0.1/getUser?id=1
:获取用户。POST http://127.0.0.1/addUser
:新增用户。POST http://127.0.0.1/updateUser?id=1
:修改用户。POST http://127.0.0.1/deleteUser?id=1
:删除用户。
RESTful 请求格式:
GET http://127.0.0.1/user/1
:获取用户。POST http://127.0.0.1/user
:新增用户。PUT http://127.0.0.1/user/1
:修改用户。DELETE http://127.0.0.1/user/1
:删除用户。