在网络开发中随着版本的更新迭代,通常要在系统中维护多个版本的api,多个版本的api在数据结构上往往也各不相同,今天就来一起学习下kubernetes中机的方案制是如何解决这个问题的,如何借助HTTP请求里面的数据进行反序列化操作
1。web请求的处理流程
1.1 HTTP请求处理流程
/api/{version}/{资源}/{行动}代码>
上面是一个基础的web url通常我们都会为每个版本注册一个对应的url,其中会包含很关键的两个信息即版本与资源,通过这两个信息,通常我们就可以知道这可能是某个资源的那个版本,如果我们把后面的行动也包裹进来,我们通常就可以知道对应的资源的那个具体操作
2.2集团组信息
POST/api/批/v1beta1/{名称空间}/计划/命名空间 POST/api/应用程序/v1/命名空间/{名称空间}/daemonsets 代码>
我们来看一个实例这是一个创建daemonsets和计划的url,如果按照集团资源,版本来进行拆分可以拆成如下:批处理,v1beta1,计划和程序,v1, daemonsets,也就是大家尝试的GroupVersionKind,其中那种对应的就是资源
2.3模型映射的实现
gvkToType地图[schema.GroupVersionKind] reflect.Type 代码>
3。反序列化实现
3.1解码机制
那如何将对应的Http里面的数据流反序列化成内部的一个对象呢,别忘记了是Http协议,肯定就是标题头里面的信息了,我们通过标题头里面的序列化就可以知道对应的编码格式,只需要调用对应格式的解码就可以完成了
<代码类=" language-go "> - type:“应用程序/json" 代码>
3.2默认对象
func解组({})[]的数据字节,v接口错误{}代码>
那只要我再提供一个当前版本对应的对象构造函数是不是就可以呢?答案是的
<代码类=" language-go "> func()对象{返回目标对象},代码>