什么是restful API
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。" 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。
REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。虽然REST本身受Web技术的影响很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的实例。 所以我们这里描述的REST也是通过HTTP实现的REST。
restful风格的API
RESTful 的核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构。比如,GET /users
这个命令,GET
是动词,/users
是宾语。
动词通常就是五种 HTTP 方法,对应 CRUD 操作。
- GET:读取(Read)
- POST:新建(Create)
- PUT:更新(Update)
- PATCH:更新(Update),通常是部分更新
- DELETE:删除(Delete)
根据 HTTP 规范,动词一律大写。
注意URL中一定要使用名词而不能使用动词。例如 /users 是符合restful风格的 而/getusers 是不符合restful风格的。
假如我们想获取某位user用户的信息,URL可写成 GET /user/2,不过在资源需要多级分类时候,很容易写出多级的 URL。
比如比如获取某个作者的某一类文章:
GET /authors/12/categories/2
而更好的写法可以写成:
GET /authors/12?categories=2
我们再设计restful API的时候需注意,客户端的每一次请求,服务器都必须给出回应。回应包括 HTTP 状态码和数据两部分。
例如查询成功时,返回状态码200:
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"data": {
查询返回的数据
}
具体各种状态码所代码意义可以自行查询,编写时注意将各种情况都要有正确的回应。
在Django下实现restful API的接口的话,常见的方法是使用rest_framework。具体实现下次写出。