從零開(kāi)始寫(xiě)一個(gè)契約測(cè)試工具——數(shù)據(jù)庫(kù)設(shè)計(jì)

接上文巷挥,第一步需要設(shè)計(jì)我們的表結(jié)構(gòu),我初步的構(gòu)想是兩張表來(lái)裝下它棘催,后續(xù)肯定會(huì)有一些變動(dòng)劲弦,因?yàn)槲乙彩且贿厡?xiě)工具一邊記錄的。

設(shè)計(jì)說(shuō)明

工具應(yīng)該有兩塊內(nèi)容醇坝,第一塊是契約的信息邑跪,這部分記錄的契約的結(jié)構(gòu)體。第二快是子契約呼猪,所有具體的值必須由子契約來(lái)承載画畅,子契約的內(nèi)容一旦定義后是不可變更的。而契約工具對(duì)消費(fèi)端和生產(chǎn)端的具體報(bào)文內(nèi)容都由子契約來(lái)承載宋距。

環(huán)境說(shuō)明

我使用的是sqlalchemy這個(gè)ORM框架來(lái)處理數(shù)據(jù)庫(kù)交互的轴踱。表結(jié)構(gòu)的代碼如下

from sqlalchemy import Column, String, Integer
from sqlalchemy.ext.declarative import declarative_base

BaseModel = declarative_base()


class ContractStructure(BaseModel):
    __tablename__ = 'contract_structure'
    id = Column(Integer, primary_key=True)
    contract_name = Column(String(500), nullable=False)
    contract_consumer_body = Column(String(10000), nullable=False)
    contract_consumer_keys = Column(String(500), nullable=False)
    contract_provider_body = Column(String(5000), nullable=False)
    contract_stakeholders = Column(String(500), nullable=False)
    contract_child_ids = Column(String(500), nullable=True)
    contract_version = Column(Integer, default=1)
    contract_last_version = Column(String(1), nullable=False, default='Y')
    provider_url = Column(String(100), nullable=True)


class ContractChild(BaseModel):
    __tablename__ = 'contract_child'
    id = Column(Integer, primary_key=True)
    child_id = Column(String(40), nullable=False)
    child_name = Column(String(100), nullable=False)
    contract_id = Column(Integer)
    child_consumer_body = Column(String(10000), nullable=False)
    child_provider_body = Column(String(5000), nullable=False)

下面我們一個(gè)一個(gè)來(lái)說(shuō)明我這樣設(shè)計(jì)的想法

ContractStructure

這個(gè)表是用來(lái)存放契約結(jié)構(gòu)以及契約的一些相關(guān)信息。

  • contract_name

契約名稱(chēng)谚赎,一般來(lái)說(shuō)方便認(rèn)識(shí)的名字比較好淫僻,比如Consumer-Provider這種。

  • contract_consumer_body

契約消費(fèi)者的結(jié)構(gòu)體壶唤,也就是consumer端發(fā)起的報(bào)文雳灵。

  • contract_consumer_keys

契約消費(fèi)者的結(jié)構(gòu)體的key,由于契約測(cè)試中結(jié)構(gòu)體是不可變的闸盔,因此必須要校驗(yàn)consumer端傳過(guò)來(lái)結(jié)構(gòu)的key值悯辙,用來(lái)確保報(bào)文結(jié)構(gòu)的一致性

  • contract_provider_body

契約生產(chǎn)者的結(jié)構(gòu)體,也就是返回給consumer端的報(bào)文結(jié)構(gòu)

  • contract_stakeholders

契約的干系人迎吵,一旦契約發(fā)生變動(dòng)躲撰,程序需要通知的對(duì)象

  • contract_child_ids

契約子內(nèi)容的id

  • contract_version

契約的版本信息,一旦契約發(fā)生變更钓觉,那么版本也要對(duì)應(yīng)的變更

  • contract_last_version

標(biāo)記改版本的契約是否為最新的契約

  • provider_url

生產(chǎn)中的url地址茴肥,工具要能夠給provider端發(fā)送契約內(nèi)容,因此需要一個(gè)字段來(lái)記錄url

contract_child

這個(gè)表用來(lái)存放子契約的內(nèi)容

  • child_name

子契約對(duì)應(yīng)的名字

  • contract_id

所屬契約的id

  • child_consumer_body

消費(fèi)端的報(bào)文內(nèi)容

  • child_provider_body

生產(chǎn)端的報(bào)文內(nèi)容

最后

以上荡灾,我們定義了工具的表,下面應(yīng)該做的就是開(kāi)始寫(xiě)具體的契約類(lèi)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末批幌,一起剝皮案震驚了整個(gè)濱河市础锐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荧缘,老刑警劉巖皆警,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異截粗,居然都是意外死亡信姓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)绸罗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)意推,“玉大人,你說(shuō)我怎么就攤上這事珊蟀【罩担” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵育灸,是天一觀的道長(zhǎng)腻窒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)磅崭,這世上最難降的妖魔是什么儿子? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮砸喻,結(jié)果婚禮上柔逼,老公的妹妹穿的比我還像新娘。我一直安慰自己恩够,他們只是感情好卒落,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蜂桶,像睡著了一般儡毕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扑媚,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天腰湾,我揣著相機(jī)與錄音,去河邊找鬼疆股。 笑死费坊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旬痹。 我是一名探鬼主播附井,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼讨越,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了永毅?” 一聲冷哼從身側(cè)響起把跨,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沼死,沒(méi)想到半個(gè)月后着逐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡意蛀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年耸别,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片县钥。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秀姐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出魁蒜,到底是詐尸還是另有隱情囊扳,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布兜看,位于F島的核電站锥咸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏细移。R本人自食惡果不足惜搏予,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弧轧。 院中可真熱鬧雪侥,春花似錦、人聲如沸精绎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)代乃。三九已至旬牲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搁吓,已是汗流浹背原茅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堕仔,地道東北人擂橘。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像摩骨,于是被迫代替她去往敵國(guó)和親通贞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子朗若,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容