十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
在web開發(fā)中隨著版本的更新迭代,通常要在系統(tǒng)中維護多個版本的api,多個版本的api在數(shù)據(jù)結(jié)構(gòu)上往往也各不相同,今天就來一起學(xué)習(xí)下kubernetes中的Scheme機制是如何解決這個問題的,如何借助HTTP請求里面的數(shù)據(jù)進行反序列化操作


通常首先是webServer先進行Http協(xié)議的處理,然后解析成基礎(chǔ)的webServer內(nèi)部的一個Http請求對象, 通常該對象持有對應(yīng)請求的請求頭和底層對應(yīng)的字節(jié)序列(從socket流中讀取)
接著首先會通常根據(jù)對應(yīng)的編碼格式來進行反序列化,完成從字節(jié)序列到當前接口的業(yè)務(wù)模型的映射, 然后在交給業(yè)務(wù)邏輯處理,從而最終進行持久化存儲, 本文的重點也就在反序列化部分
/api/{version}/{resource}/{action}上面是一個基礎(chǔ)的web url通常我們都會為每個版本注冊一個對應(yīng)的URL, 其中會包含很關(guān)鍵的兩個信息即version與resource,通過這兩個信息,通常我們就可以知道這可能是某個資源的那個版本, 如果我們把后面的action也包裹進來,我們通常就可以知道對應(yīng)的資源的那個具體操作

在微服務(wù)流行的今天我們通常會為按照業(yè)務(wù)功能來進行微服務(wù)的切分,本質(zhì)上一個微服務(wù)可能就是實現(xiàn)某個具體業(yè)務(wù)場景的功能集合,比如用戶系統(tǒng)通常會包含用戶的所有相關(guān)操作,在kubernetes中也有類似的概念就是所謂的Group
POST /apis/batch/v1beta1/namespaces/{namespace}/cronjobs
POST /apis/apps/v1/namespaces/{namespace}/daemonsets我們來看一個實例這是一個創(chuàng)建daemonsets和cronjobs的url, 如果按照Group、resource、version來進行拆分可以拆成如下:batch、v1beta1、cronjobs和apps、v1、daemonsets,也就是大家嘗試的GroupVersionKind,其中kind對應(yīng)的就是resource

我們通過url里面獲取到資源的GroupVersionKind信息,如何將其映射為一個具體的類型呢? 這貌似就很簡單了結(jié)合反射和map來進行就可以了,我們通過url獲取到對應(yīng)想的GVK信息,然后在通過我們的映射表,就知道對應(yīng)的模型是哪個,接下來就只需要進行轉(zhuǎn)換就行了
gvkToType map[schema.GroupVersionKind]reflect.Type那如何將對應(yīng)的Http里面的數(shù)據(jù)流反序列化成內(nèi)部的一個對象呢,別忘記了是Http協(xié)議, 肯定就是header頭里面的信息了,我們通過header頭里面的序列化就可以知道對應(yīng)的編碼格式,只需要調(diào)用對應(yīng)格式的解碼就可以完成了
Content-Type: "application/json"
如果要將json格式的字節(jié)數(shù)組進行解碼通常要進行如下操作,我們需要傳入一個目標對象的指針,然后由json將對應(yīng)的字節(jié)數(shù)據(jù)解析到目標對象中,我們也需要這樣一個對象,用于存儲反序列化的結(jié)果
func Unmarshal(data []byte, v interface{}) error {}那只要我再提供一個當前版本對應(yīng)的對象構(gòu)造函數(shù)是不是就可以呢?答案是的
func() Object{ return 目標對象 },
首先在進行url注冊的時候,我們構(gòu)造出對應(yīng)url映射的資源的版本信息即GroupVersionKind,后續(xù)的很多操作我們可以通過對應(yīng)的版本映射獲取對應(yīng)的目標操作或者對象,然后再通過Header里面的字段獲取對應(yīng)的解碼器,并將Body里面的字節(jié)序列進行解碼到目標對象,就可以實現(xiàn)多版本資源的映射和反序列化操作了
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。