21.Django_RESTful简介

REST

  • REST是REpresentationsal State Transfer的缩写,具象状态转换
  • RESTful是一种开发理念,是一种API设计风格,而不是标准

主要的规范

  • 每一个URL代表一种资源,具体要对资源进行什么操作,是根据请求方式来区分的,而不是在URL上直接体现:
    GET http://www.xxx.com/get_user/01(不安全、繁琐、难维护等弊端),可以设计成GET http://www.xxx.com/user/01
  • 后端返回的资源数据类型有:
    1. json格式数据
    2. text文本
    3. 图片、视频等
  • 客户端和服务器之间,传递这种资源的某种表现形式
    1. 后端通过请求头Content-Type来指明传给服务端的参数类型,比如application/json
    2. 后端通过请求头中Accept来指明希望后端返回的相应数据的类型,比如application/json
  • 客户端通过请求方式的不同,指明对服务器资源进行不同的操作
    1. GET:read
    2. POST:create
    3. PUT:update/replace
    4. PATCH:partial/update/modify
    5. DELETE:delete

REST常用的设计规范

一、URL

1. 命名

- 尽量使用名词复数形式,尽量不要使用动词
- 往往与数据库的表名对应
差的设计:

在这里插入图片描述
好的设计:

在这里插入图片描述

2. 过滤条件

如果记录数量很多,则需添加条件进行限制,否则返回数据太多,影响性能

?limit = 10 # 指定返回记录的数量
?offset = 10 # 指定返回记录的开始位置
?currPage=2&pageSize=10 # 指定第几页和每页多少条数据
?sort=name # 指定返回结果按照指定的属性进行排序

3.域名

  • 尽量使用专用域名
http://api.wwj.com

4.版本号

  • 在url中呈现版本号
http://xxx/app/1.0/
http://xxx/app/1.1/
  • 也可以在请求头呈现
Accept:application/vnd.example.v1.0+json
Accept:application/vnd.example.v1.1+json;version=1.1

二、请求方式/动词

  • 常见的http请求(括号中对应的sql命令)
    GET(select) : 从服务器获取资源(一个或多个)
    POST(create) : 在服务器创建一个资源
    PUT(update): 在服务器更新资源(客户端提供所要更新的完整资源,比如要更新user的age,但如果是put,需要提供user的全部数据)
    DELETE(delete): 从服务器删除资源
  • 下面是不常见的三种
    PATCH(update where):在服务器进行部分资源的更新(客户端提供改变的属性)
    HEAD:获取资源的元数据
    OPTIONS:获取关于资源的哪些属性是客户端可以改变的信息,一般 后面会跟其它常用请求

例子(很重要)

GET /projects        # 获取所有项目信息
POST /projects       # 创建一个新项目 
GET / projects/6     # 获取id=6的项目信息 
PUT /projects/6      # 更新id=6的项目信息(全更新)
PATCH /projects/6    # 更新id=6的项目信息(部分更新)
DELETE /projects/6   # 删除id=6的项目
''' 多层级信息的获取的设计 '''
GET /projects/6/interfaces    # 获取id=6的项目信息中所有的接口信息
GET /projects/6/interfaces/1  #获取id=6的项目信息中id=1的接口信息

三、常见状态码(RESTful)

Status Codes

200  ok - [GET]:                                           服务器成功返回用户请求的数据
201  CREATED - [POST/PUT/PATCH]:      用户创建成功或修改数据成功
204  NO CONTENT - [DELETE]:                用户删除数据成功
400  INVALID REQUEST - [POST/PUT/PATCH]:用户请求有误(请求参数有问题)
401 Unauthorized = [^] :         表示用户没有权限(cookies、用户名、密码错误)
403 Forbidden - [^]:        表示用户得到授权(和401错误相对),但是访问是禁止的
404 NOT FOUND - [^]:   表示用户请求的路径不存在
500 INTERNAL SERVER ERROR - [^]:   服务器发生错误

四、错误处理

当请求有误时,服务器需将错误信息以json的格式返回,比如:

{
    "code":1001,
    "data":null,
    "msg":"用户不存在"
}

五、超链接API

响应数据中,可以包含下一步操作的url链接(比如说上一页、下一页的链接字段)
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章