使用kubernetes中机的方案制进行反序列化的操作

  

在网络开发中随着版本的更新迭代,通常要在系统中维护多个版本的api,多个版本的api在数据结构上往往也各不相同,今天就来一起学习下kubernetes中机的方案制是如何解决这个问题的,如何借助HTTP请求里面的数据进行反序列化操作

1。web请求的处理流程

1.1 HTTP请求处理流程

使用kubernetes中机的方案制进行反序列化的操作“> <br/>通常首先是网络服务器先进行HTTP协议的处理,然后解析成基础的网络服务器内部的一个HTTP请求对象,通常该对象持有对应请求的请求头和底层对应的字节序列(从套接字流中读取)<br/>接着首先会通常根据对应的编码格式来进行反序列化,完成从字节序列到当前接口的业务模型的映射,然后在交给业务逻辑处理,从而最终进行持久化存储,本文的重点也就在<强>反序列化部分</强> </p> <h2> 2。模型映射的实现</h2> <h3> 2.1描述资源版本信息</h3> <pre> <代码类=/api/{version}/{资源}/{行动}

上面是一个基础的web url通常我们都会为每个版本注册一个对应的url,其中会包含很关键的两个信息即版本与资源,通过这两个信息,通常我们就可以知道这可能是某个资源的那个版本,如果我们把后面的行动也包裹进来,我们通常就可以知道对应的资源的那个具体操作

2.2集团组信息

使用kubernetes中机的方案制进行反序列化的操作“> <br/>在微服务流行的今天我们通常会为按照业务功能来进行微服务的切分,本质上一个微服务可能就是实现某个具体业务场景的功能集合,比如用户系统通常会包含用户的所有相关操作,在kubernetes中也有类似的概念就是所谓的组</p> <pre> <代码类= POST/api/批/v1beta1/{名称空间}/计划/命名空间   POST/api/应用程序/v1/命名空间/{名称空间}/daemonsets

我们来看一个实例这是一个创建daemonsets和计划的url,如果按照集团资源,版本来进行拆分可以拆成如下:批处理,v1beta1,计划和程序,v1, daemonsets,也就是大家尝试的GroupVersionKind,其中那种对应的就是资源

2.3模型映射的实现

使用kubernetes中机的方案制进行反序列化的操作“> <br/>我们通过url里面获取到资源的GroupVersionKind信息,如何将其映射为一个具体的类型呢?这貌似就很简单了结合反射和地图来进行就可以了,我们通过url获取到对应想的共处信息,然后在通过我们的映射表,就知道对应的模型是哪个,接下来就只需要进行转换就行了</p> <pre> <代码类= gvkToType地图[schema.GroupVersionKind] reflect.Type

3。反序列化实现

3.1解码机制

那如何将对应的Http里面的数据流反序列化成内部的一个对象呢,别忘记了是Http协议,肯定就是标题头里面的信息了,我们通过标题头里面的序列化就可以知道对应的编码格式,只需要调用对应格式的解码就可以完成了

 <代码类=" language-go "> - type:“应用程序/json"  

3.2默认对象

使用kubernetes中机的方案制进行反序列化的操作“> <br/>如果要将json格式的字节数组进行解码通常要进行如下操作,我们需要传入一个目标对象的指针,然后由json将对应的字节数据解析到目标对象中,我们也需要这样一个对象,用于存储反序列化的结果</p> <pre> <代码类= func解组({})[]的数据字节,v接口错误{}

那只要我再提供一个当前版本对应的对象构造函数是不是就可以呢?答案是的

 <代码类=" language-go "> func()对象{返回目标对象}, 

4。设计总结

使用kubernetes中机的方案制进行反序列化的操作“> <br/>首先在进行url注册的时候,我们构造出对url应映射的资源的版本信息即GroupVersionKind,后续的很多操作我们可以通过对应的版本映射获取对应的目标操作或者对象,然后再通过标题里面的字段获取对应的解码器,并将身体里面的字节序列进行解码到目标对象,就可以实现多版本资源的映射和反序列化操作了</p> <p>
  </p><h2 class=使用kubernetes中机的方案制进行反序列化的操作