美文网首页
DRF使用篇(一):什么是restful

DRF使用篇(一):什么是restful

作者: 是立品啊 | 来源:发表于2020-07-13 20:34 被阅读0次

    什么是restful

    RESTful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
    它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,
    更易于实现缓存等机制。

    • REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有
      特征和能力, 更好地使用现有Web标准中的一些准则和约束。虽然REST本身受Web技术的影响
      很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的
      实例。 所以我们这里描述的REST也是通过HTTP实现的RESTRESTful的核心操作:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。
      那这种风格的接口有什么好处呢?可以前后端分离。前端拿到数据只负责展示和渲染,不对数
      据做任何处理。后端处理数据并以JSON格式传输出去,定义这样一套统一的接口,在webiosandroid三端都可以用相同的接口。

    • REST全称是Representational State Transfer,中文意思是 表征状态转移 。 它首次出现在2000年 Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。" 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。

    一个好的RESTful接口需要遵循以下规范

    1. 域名

    专属 API 域名的接口: https://api.example.com

    2. 版本

    • API 的版本号应该写入到 URL 路径中:
      http://www.example.com/app/1.0/foo
      or
      http://www.example.com/app/1.1/foo,
    • 或者把版本号放到请求头中:
      Accept: vnd.example-com.foo+json; version=1.0
      or
      Accept: vnd.example-com.foo+json; version=2.0

    3. 路径

    • 路径 endpoint 表示 API 的具体网址, 每个 URl 代表一个资源 resource
    • 资源作为网址的时候, 约定俗成, 只能有名词, 不能有动词,利用 HTTP 的请求方式可以确定操作
    • 请求路径中, 名词应该为复数http://127.0.0.1:8000/users

    4. HTTP请求方式释义:

    • GET : 从服务器获取资源,一个或者多个: users/:获取所有用户, users/1 获取pk为 1 的用户
    • POST : 在服务器新建一个资源: users/ 请求体中需要包含创建用户的信息
    • PUT : 在服务器更新资源(客户端提供改变后的完整资源): users/1请求体包含pk1的用户的全部必传信息
    • PATCH : 在服务器更新资源(局部更新某资源的单独字段): users/1请求体包含pk1的用户的某个字段的信息
    • DELETE : 从服务器删除资源: users/1 删除 pk1的用户全部信息
    • OPTIONS : 获取信息,关于资源的哪些属性是客户端可以改变的

    5. 过滤信息

    如果返回的信息过多,服务器不应该一次性给客户端返回全部的结果,API应该提供参数过滤返回结果

    • ?limit=10:指定返回记录的数量
    • ?offset=10:指定返回记录的开始位置。
    • ?page=2&page_size=100:指定第几页,以及每页的记录数。
    • ?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
    • ?project_type_id=1:指定筛选条件

    6. 状态码

    服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)

    • 200 OK - [GET]:服务器成功返回用户请求的数据
    • 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
      -202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
    • 204 NO CONTENT - [DELETE]:用户删除数据成功。
      -400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作
    • 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
    • 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
    • 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
    • 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
    • 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
    • 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
    • 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

    7. 错误处理

    如果状态码是4xx ,服务器应该向客户端返回错误信息,返回的Keyerror, 出错信息作为Value

    {
    error: "Invalid API key"
    }
    

    8. 返回结果

    • 根据客户端不同的请求,服务器向客户端返回的结果也有规范
    • 服务器返回的数据格式,应该尽量使用JSON,避免使用XML
      • GET : 返回一个或者多个对象
      • POST : 返回新生成的资源对象
      • PUT : 返回完整的资源对象
      • PATCH : 返回完整的资源对象
      • DELETE : 返回空文档

    相关文章

      网友评论

          本文标题:DRF使用篇(一):什么是restful

          本文链接:https://www.haomeiwen.com/subject/uicocktx.html