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

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

序列化Serialization

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

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

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

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

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

将程序中的一个数据结构类型转换为其他格式(字典、JSON、XML等),例如将Django中的模型类对象装换为JSON字符串,这个转换过程我们称为序列化。

如:

queryset = BookInfo.objects.all()
book_list = []
# 序列化
for book in queryset:book_list.append({'id': book.id,'btitle': book.btitle,'bpub_date': book.bpub_date,'bread': book.bread,'bcomment': book.bcomment,'image': book.image.url if book.image else ''})
return JsonResponse(book_list, safe=False)

反之,将其他格式(字典、JSON、XML等)转换为程序中的数据,例如将JSON字符串转换为Django中的模型类对象,这个过程我们称为反序列化。

如:

json_bytes = request.body
json_str = json_bytes.decode()# 反序列化
book_dict = json.loads(json_str)
book = BookInfo.objects.create(btitle=book_dict.get('btitle'),bpub_date=datetime.strptime(book_dict.get('bpub_date'), '%Y-%m-%d').date()
)

我们可以看到,在开发REST API时,视图中要频繁的进行序列化与反序列化的编写。

总结

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

  • 将数据库数据序列化为前端所需要的格式,并返回;

  • 将前端发送的数据反序列化为模型类对象,并保存到数据库中。

明确REST接口开发的核心任务相关推荐

  1. 开发板_Hi3516DV300核心板/开发板;Hi3516EV100+4G+AUDIO RTMP开发板;海思系列开发板/核心板定制开发...

    1.海思Hi3516DV300核心板/开发板 一,芯片参数 1. 处理器内核 *双核ARM Cortex-A7@ 900MHz,32KB I-Cache,32KB D-Cache,256KB L2 C ...

  2. java webservice接口开发_给Java新手的一些建议----Java知识点归纳(J2EE and Web 部分)

    J2EE(Java2 Enterprise Edition) 刚出现时一般会用于开发企业内部的应用系统,特别是web应用,所以渐渐,有些人就会把J2EE和web模式画上了等号.但是其实 J2EE 里面 ...

  3. 全志r11_全志R328 Demo开发板;全志R333开发板/核心板;全志R11开发板/核心板;全志R16开发板/方案设计...

    1.全志R328 Demo开发板 参数: 扫码可见详情信息: 2.全志R333开发板/核心板 硬件特征: 扫码可见详情信息: 3.全志R11开发板/核心板 硬件特征: 具体详情扫码可见: 4.全志R1 ...

  4. SpringBoot+Vue博客系统---后端接口开发

    Java后端接口开发 从零开始搭建一个项目骨架,最好选择合适,熟悉的技术,并且在未来易拓展,适合微服务化体系等.所以一般以Springboot作为我们的框架基础,这是离不开的了. 然后数据层,我们常用 ...

  5. Mybatis—代理开发和核心配置文件深入

    代理开发方式介绍 采用 Mybatis 的代理开发方式实现 DAO 层的开发,这种方式是我们后面进入企业的主流. Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由 ...

  6. 基于SpringBoot+Vue开发的前后端分离博客项目-Java后端接口开发

    文章目录 1. 前言 2. 新建Springboot项目 3. 整合mybatis plus 第一步:导依赖 第二步:写配置文件 第三步:mapper扫描+分页插件 第四步:代码生成配置 第五步:执行 ...

  7. php银联支付接口 demo,php版银联支付接口开发简单实例详解

    这篇文章主要介绍了php版银联支付接口开发的方法,结合实例形式分析了php银联支付接口开发的具体流程与相关操作技巧,需要的朋友可以参考下 支付接口现在有第三方的支付接口也有银行的支付接口.这里就来介绍 ...

  8. 网易云信IM即时通讯PHP接口开发

    网易云信:https://www.163yun.com 注册地址:https://app.netease.im/regist 登录地址:https://app.netease.im/login 架构设 ...

  9. 为什么需要API接口开发?

    API网关是提供服务开放和共享的企业级PaaS平台,提供发布管理.统一认证鉴权.流控.协议转换.服务审计等功能,帮助用户实现内部多系统间,或者内部系统与外部系统之间实现跨系统.跨协议的服务能力互通. ...

最新文章

  1. TypeScript的推介与应用
  2. Junit测试JAVA文件,java – Junit测试模拟文件操作
  3. 全球及中国新式茶饮行业销售价值与经营布局渠道研究报告2022版
  4. a - 数据结构实验之串一:kmp简单应用_串的两种模式匹配方式(BF/KMP算法)
  5. 计算机 网络访问保护,开启win2008网络访问保护的具体步骤
  6. Mac终端Terminal使用
  7. CV_Sicong Liu
  8. python:文件打包为exe
  9. OO第一单元总结分析
  10. HDU1214 圆桌会议【数学】
  11. n986原生android,【极光ROM】-【三星NOTE20高通全系列(国行/港版/台版/韩版/美版/日版) N98XX】-【V8.0 Android-R-UDC】...
  12. STM32F407与CS5531、CS5532、CS5533、CS5534通信程序解析
  13. 这份整理的图解Java(全彩版)火了,完整PDF开放下载
  14. 回忆旧时读叶芝的WHEN YOU ARE OLD
  15. 基于python高仿探迹源码
  16. 串口通信(SBUF代码原理详解)
  17. cadence原理图复用_详细了解一下Allegro原理图设计工具SDA 的十大主要功能和改变...
  18. 字符串的几种常见的反转
  19. Java 读取Word文本框中的文本、图片、表格
  20. html 文字段落编辑,美化html段落文本 Ⅰ

热门文章

  1. 基于 Python 环境搭建 - YOLO 实现吸烟行为监测
  2. 浪潮刘军:为什么说计算力是AI时代“免费的午餐”?
  3. 算力“竞速”,企业AI落地的当务之急
  4. “万人迷”小冰背后的AI故事
  5. 先写API文档还是先写代码?你需要这款神器Apifox!
  6. IDEA 强大的 Live Templates,代码生成利器
  7. 分布式ID(唯一性)的生成方法汇总
  8. IntelliJ IDEA 新版介绍
  9. 万字解读:预训练模型最新综述!
  10. 从0梳理1场时间序列赛事!