美文网首页
DjangoRESTframework框架介绍

DjangoRESTframework框架介绍

作者: 一杯海风_3163 | 来源:发表于2019-10-18 11:45 被阅读0次

    文章目录:
    •Web应用前后端分离结构
    •Web API接口设计的RESTful风格
    •Django REST framework框架

    开发思路:

    我们从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计REST API,通过使用Django来实现一个REST API为例,明确后端开发REST API要做的最核心工作,然后介绍Django REST framework能帮助我们简化开发REST API的工作。

    了解以下两种Web应用模式

    在开发Web应用中,有两种应用模式:
    •前后端不分离
    •前后端分离

    1 前后端不分离
    前后端不分离.png

    在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。

    这种应用模式比较适合纯网页应用,但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而仅仅是数据本身,所以后端原本返回网页的接口不再适用于前端App应用,为了对接App后端还需再开发一套接口。

    2 前后端分离
    indepent_frontend_backend.png

    在前后端分离的应用模式中,后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果。至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页的处理方式,App有App的处理方式,但无论哪种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据即可。

    在前后端分离的应用模式中 ,前端与后端的耦合度相对较低。

    在前后端分离的应用模式中,我们通常将后端开发的每个视图都称为一个接口,或者API,前端通过访问接口来对数据进行增删改查。

    认识RESTful

    在前后端分离的应用模式里,后端API接口如何定义?

    例如对于后端数据库中保存了商品的信息,前端可能需要对商品数据进行增删改查,那相应的每个操作后端都需要提供一个API接口:
    1.POST /add-goods 增加商品
    2.POST /delete-goods 删除商品
    3.POST /update-goods 修改商品
    4.GET /get-goods 查询商品信息

    对于接口的请求方式与路径,每个后端开发人员可能都有自己的定义方式,风格迥异。

    是否存在一种统一的定义方式,被广大开发人员接受认可的方式呢?

    这就是被普遍采用的API的RESTful设计风格。

    RESTful架构就是:

    •每一个URL代表一种资源;
    •客户端和服务器之间,传递这种资源的某种表现层;
    •客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

    明确REST接口开发的核心任务

    分析一下上节的案例,可以发现,在开发REST API接口时,视图中做的最主要有三件事:

    • 将请求的数据(如JSON格式)转换为模型类对象
    • 操作数据库
    • 将模型类对象转换为响应的数据(如JSON格式)
    序列化Serialization

    维基百科中对于序列化的定义:

    序列化(serialization)在计算机科学的资料处理中,是指将数据结构或物件状态转换成可取用格式(例如存成档案,存于缓冲,或经由网络中传送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。依照序列化格式重新获取字节的结果时,可以利用它来产生与原始物件相同语义的副本。对于许多物件,像是使用大量参照的复杂物件,这种序列化重建的过程并不容易。面向对象中的物件序列化,并不概括之前原始物件所关联的函式。这种过程也称为物件编组(marshalling)。从一系列字节提取数据结构的反向操作,是反序列化(也称为解编组, deserialization, unmarshalling)。

    序列化在计算机科学中通常有以下定义:

    ​ 在数据储存与传送的部分是指将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等,或者透过网络传送资料时进行编码的过程,可以是字节或是XML等格式。而字节的或XML编码格式可以还原完全相等的对象。这程序被应用在不同应用程序之间传送对象,以及服务器将对象储存到档案数据库。相反的过程又称为反序列化

    简而言之,我们可以将序列化理解为:

    将程序中的一个数据结构类型转换为其他格式(字典、JSON、XML等),例如将Django中的模型类对象装换为JSON字符串,这个转换过程我们称为序列化。
    反之,将其他格式(字典、JSON、XML等)转换为程序中的数据,例如将JSON字符串转换为Django中的模型类对象,这个过程我们称为反序列化。在开发REST API时,视图中要频繁的进行序列化与反序列化的编写。

    在开发REST API接口时,我们在视图中需要做的最核心的事是:

    •将数据库数据序列化为前端所需要的格式,并返回;
    •将前端发送的数据反序列化为模型类对象,并保存到数据库中。

    Django REST framework 简介

    1.在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的。
    2.在开发REST API的视图中,虽然每个视图具体操作的数据不同,但增、删、改、查的实现流程基本套路化,所以这部分代码也是可以复用简化编写的:◦增:校验请求数据 -> 执行反序列化过程 -> 保存数据库 -> 将保存的对象序列化并返回
    ◦删:判断要删除的数据是否存在 -> 执行数据库删除
    ◦改:判断要修改的数据是否存在 -> 校验请求的数据 -> 执行反序列化过程 -> 保存数据库 -> 将保存的对象序列化并返回
    ◦查:查询数据库 -> 将数据序列化并返回

    Django REST framework可以帮助我们简化上述两部分的代码编写,大大提特点
    •提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;

    特点

    •提供了丰富的类视图、Mixin扩展类,简化视图的编写;
    •丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;
    •多种身份认证和权限认证方式的支持;
    •内置了限流系统;
    •直观的 API web 界面;
    •可扩展性,插件丰富
    高REST API的开发速度。
    Django REST framework 框架是一个用于构建Web API 的强大而又灵活的工具。
    通常简称为DRF框架 或 REST framework。

    相关文章

      网友评论

          本文标题:DjangoRESTframework框架介绍

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