什么是Django REST framework

笑着哭i 提交于 2019-12-06 00:25:10

一直在说 Django REST framework,那它到底是什么,你是怎么理解的呢?我查了一些资料,对Django REST framework有了一些粗浅的理解,记录下来。(通常简称Django REST framework为DRF框架)。

github链接

从字面理解开始

仅从字面意思理解的话,Django和framework指的是Django,框架。那REST呢?

  • REST是Representational State Transfer的简称,中文翻译为“表现层状态转化”,REST与技术无关,代表的是一种软件架构风格,遵循REST的架构风格,称为RESTful。
    REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。
    他在介绍他的论文时说到:

“网络研究主要关注系统之间通信行为的细节、如何改进特定通信机制的表现,常常忽视了一个事实,那就是改变应用程序的互动风格比改变互动协议,对整体表现有更大的影响。我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。”

Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。
如果我把rest译为:使人轻松的,让人得到休息的,不知道他会怎么想,哈哈,但是为了便于理解,我们不妨再暂且这么认为。
RESTful架构风格,因其可扩展性和简单性受到越来越多的架构师和开发者们的青睐,时至今日,RESTful架构风格已成为企业级服务的标配。

RESTful

现在我们来到了RESTful,RESTful是什么呢?RESTful有三个基本概念一些显著特点

  • 资源
    首先需要注意的是,REST的名称"表现层状态转化"中,省略了主语,主语就是资源(Resources),资源是网络上的一个实体,或者说是网络上的一个具体信息,可以是文本、图片、音视频等。RESTful 架构风格的服务是围绕资源展开的,是典型的ROA(面向资源架构)。
  • 表现层
    “资源"可以有多种外在表现形式,我们把"资源"具体呈现出来的形式,叫做它的"表现层”(Representation)。如:文本可以是txt格式,图片可以是jpg、png格式等,JSON是现在最常用的资源表示格式。
  • 状态转化
    访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。
      互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer),而这种转化是建立在表现层之上的。
  • 特点:统一接口
    RESTful架构风格规定,数据的元操作,即CRUD(create, read, update和delete)操作,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作。
HTTP动词 SQL命令 含义
GET SELECT 从服务器取出资源(一项或多项)
POST CREATE 在服务器新建一个资源
PUT UPDATE 在服务器更新资源
DELETE DELETE 从服务器删除资源
PATCH UPDATE 在服务器更新资源
HEAD ----- 获取资源的元数据
OPTIONS ----- 获取信息,关于资源的哪些属性是客户端可以改变的
  • 特点:URI(统一资源定位符)
    可以用一个URI(统一资源定位符)指向资源,即每个URI都对应一个特定的资源。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或识别符。
    一般的,每个资源至少有一个URI与之对应,最典型的URI即URL。
  • 特点:路径(Endpoint)
    资源作为网址,只能有名词,不能有动词,而且所用的名词往往与数据库的表名对应。
    以下是不好的例子:
/getProducts	# 获取所有商品
/listOrders	# 查询列举所有订单

对于一个简洁结构,你应该始终用名词, 如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源。
API中的名词应该使用复数。无论子资源或者所有资源。

举例来说,获取产品的API可以这样定义
获取单个产品:http://127.0.0.1:8080/products/1
获取所有产品: http://127.0.0.1:8080/products
  • 特点:无状态
    所谓无状态的,即所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。
    有状态和无状态的区别,举个简单的例子说明一下。如查询员工的工资,如果查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,则这种情况是有状态的,因为查询工资的每一步操作都依赖于前一步操作,只要前置操作不成功,后续操作就无法执行;如果输入一个url即可得到指定员工的工资,则这种情况是无状态的,因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个url与之对应,可以通过HTTP中的GET方法得到资源,这是典型的RESTful风格。

Django REST framework

Tom Christie 在Django框架的基础之上,进行二次开发,便有了Django REST framework,DRF是一个用于构建Web API 的强大而又灵活的工具。
github链接
官方文档

  • 主要特点
    • 提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;
    • 提供了丰富的类视图、Mixin扩展类,简化视图的编写;
    • 丰富的定制层级:函数视图、类视图、视图集合到自动生成 - API,满足各种需要;
    • 多种身份认证和权限认证方式的支持;
    • 内置了限流系统;
    • 直观的 API web 界面;
    • 可扩展性,插件丰富

所以,Django REST framework 是:基于Django,遵循RESTful风格的框架。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!