• 序列化


    写这篇文章的起因是项目中遇到一个问题,然后引发了我对序列化一系列的思考。

    整件事情

    如果你的后端小伙伴写了一个get请求类型的接口,但是请求的参数中包含了一个数组。例如:bottomTab[1,2]

    于是乎......

    ①、假设你的项目使用aixos这个HTTP 库发送请求。

    ②、假设你的项目没有使用qs这种插件、并且对get请求的参数进行序列化操作。

    那么......

    那么将会报错,打开控制台会发现参数是如下这样被拼接到请求地址后面的:

    http://localhost:8014/ehuzhu/index/chart?bottomTab[]=1&bottomTab[]=2&......

    后端是解析不了的,预期的结果是如下这样:

    http://localhost:8014/ehuzhu/index/chart?bottomTab=1&bottomTab=2&......

    解决办法:

    //在aixos实例的请求拦截里面
    import qs from 'qs'
    ......
    //利用qs插件对get方式请求的参数进行序列化
    if ( config.method === 'get' ) {
        config.paramsSerializer = function (params) {
            return qs.stringify(params, { arrayFormat: 'repeat' })
        }
    }

    关于qs这个插件的使用,自行百度一下去看文档即可。

    那么具体问题是解决了,事情本应该到此结束了。但是本人还是存在很多很多问题,特别是对于序列化这个词是一点概念也没有。

    存在问题

    ①什么是序列化?

    序列化和反序列化-美团技术团队,显然看懂这篇文章需要专业的知识,遗憾的是本人目前并没有这种储备。因此,以下叙述都是本人自己理解。

    1、序列化: 将数据结构或对象转换成二进制串的过程。

    2、不同的计算机语言中,数据结构,对象以及二进制串的表示方式并不相同。

    3、序列化所生成的二进制串指的是存储在内存中的一块数据。


    以上三点是美团技术团队文章中的描述,那么按文章中举的例子来理解。

    Java语言的二进制串指的是byte[],byte是Java的8中原生数据类型之一。

    C++语言的二进制串指C++语言的字符串、因为C++语言的字符串可以直接被传输层使用。

    那么前端使用的JavaScript语言呢?

    MDN上关于序列化(Serialization)的描述中提到,在 JavaScript 中,你可以通过调用JSON.stringify()函数将某个值序列化为JSON格式的字符串。

    那么对应的JavaScript语言中的二进制串就是上述提到的JSON格式的字符串?JSON格式的字符串是内存中的一块数据吗?

    我目前的知识储备来说,还无法下这个定论。

    ②为什么要序列化?

    1、互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议。

    2、序列化和反序列化属于通讯协议的一部分。

    3、序列化协议属于TCP/IP协议应用层的一部分。(序列化协议:XML、JSON......)


    以上三点是美团技术团队文章中的描述,已经回解决了大部分疑问。

    over......

  • 相关阅读:
    python tkinter坐标转换
    python tkinter画圆
    打开pycharm提示python已停止工作
    关于python读写文件的r+方式的坑
    pycharm的一个bug,pycharm 在debug时,会运行项目下的所有文件,而不是当前文件
    python tkinter实时显示曲线
    书上关于*(p++)表达式的几种变形形式的思考题
    lua 中的 loadfile、dofile和require的调用
    css控制字体线使用:text-decoration
    devpi 快速入门:上传,测试,推送发行版
  • 原文地址:https://www.cnblogs.com/maoweizhao/p/16081149.html
Copyright © 2020-2023  润新知