干貨 | Api 體系架構分享(上)

最近呢岸裙,在做 api 的設計

對于設計建芙,一方面是對于后端 server 框架的設計来累,另一方面呢砚作,是對于整個 api 體系的設計

在這里呢,我們來理理思路嘹锁,先來大致分一下塊

風格就不用說了葫录,我們就用 restful 風格,接下來:

  • IDL领猾,也就是我們所說的接口描述語言
  • server 框架米同,整個 api 服務的核心驅動
  • 版本控制
  • 還有一些輔助工具,比如說摔竿,自動化工具面粮、認證授權、監(jiān)控上報继低、日志記錄熬苍、檢索等等

然后呢,我們就來分別說說設計開發(fā)中的一些感觸

Api 設計

IDL

顧名思義袁翁,IDL 是我們整個 api 體系的核心模型柴底,基本上所有的東西都是要基于我們的 IDL 的,在使用的選擇上有很多粱胜,比如 Yaml柄驻、Jsonxml年柠、PB 等等凿歼,這些都可以作為接口描述語言,同時呢冗恨,各有優(yōu)劣答憔,在這里呢,我們考慮了以下這幾種:

JsonJson 是一種穩(wěn)定并得到廣泛應用的序列化格式掀抹,瀏覽器包含對該格式的原生解析能力虐拓,瀏覽器內建調試器也能很好地顯示這種內容。唯一不足在于要具備 Json 解析器/序列器傲武,好在基本所有語言都已提供蓉驹。使用 Json 最主要的麻煩在于每條信息會重復包含屬性名城榛,導致傳輸效率低下,同時呢态兴,Json 對于一些 api 開發(fā)過程中可能出現的特殊需求可能會處理不好狠持,比如說,字段之間的依賴關系瞻润,就不容易描述出來

Yaml:使用 Yaml 來定義我們的 api 模型的話喘垂,可謂是非常的簡潔明了,但是對于 api 模型中的一些復雜結構绍撞,以及一些字段的自檢測正勒,并不能夠很好的支持,同時傻铣,這個格式也不容易在開發(fā)中進行約定章贞,可能會引起一些不必要的麻煩

PB:PB 全稱是 Protocol Buffers,是谷歌創(chuàng)建的一種基于二進制連接格式的接口描述語言非洲。在解析和網絡傳輸方面 Protocol Buffers 更高效鸭限,并經歷了谷歌高負荷環(huán)境的考驗,不足在于一些語言的支持并不是很好怪蔑,主要還是對于 C里覆、python 和 java 的支持丧荐,并且呢缆瓣,在 .proto 文件的共享和編譯方面會產生些許額外開發(fā)負擔

xml:這個大家就都非常熟悉了,相對于 JsonYaml虹统,xml 就顯得有些笨重了弓坞,但是 xml 能夠很好的應用于各種特殊的場景,能夠根據不斷的線上需求進一步的擴展车荔,并且可以直接通過 xsd 進行自校驗渡冻,從功能上來講,或許會更加完善一些

因為 IDL 是我們 api 的核心忧便,以后的各項業(yè)務基本都要圍繞 IDL 展開族吻,所以需要能夠功能完善,便于擴展珠增,并且在開發(fā)中能夠有一些自動化的工具來進行約束超歌,so,最終呢蒂教,還是決定采用 xml 的形式

server 框架

核心代碼非常的簡單巍举,只需要寫一個 route 來實現路由調用就行了,但是凝垛,為了輔助他能夠正常的調用懊悯,我們就不得不實現更多的一些輔助功能了

可以來看一下我的基本的目錄結構

Framework
    │
    ├── Auth        認證蜓谋、鑒權模塊
    │
    ├── Base        基礎服務
    │
    ├── Client      各種端服務
    │
    ├── Common      公共組件
    │
    ├── Core        核心調度邏輯
    │
    ├── Coroutine   協(xié)程調度實現
    │
    ├── Exception   異常處理
    │
    ├── Http        協(xié)議實現
    │
    ├── Log         日志上報,監(jiān)控模塊
    │
    ├── Pool        連接池(資源池)
    │
    └── Resource    資源模型

同時呢炭分,開發(fā)過程中要降低各模塊間依賴關系桃焕,就比如說,與其 new 一個對象捧毛,不如采用 set 的方式來解耦覆旭,預期繼承,不如采用組合的方式岖妄,保證各個模塊的獨立性型将,同時呢各模塊間又要有一個通訊通道

為了實現一些特殊的需求,我們采用協(xié)程調度來實現非阻塞 IO荐虐,當然七兜,這里我們就需要實現一個單獨的服務端口監(jiān)聽,就好比 swoole 或是 workerman 那樣福扬,編寫獨立的服務進程

ok腕铸,上面也提到了,核心代碼只需要實現一個 route 路由就行了铛碑,但是在路由前后狠裹,要記得留出認證、鑒權接口汽烦,同時呢涛菠,對于運行時的異常也要及時捕獲上報,同時記入日志撇吞,方便調試

對了俗冻,除了這些 server 服務依賴,數據也要注意哦牍颈,最好是能夠在原始數據之上再單獨抽離出來一層數據接口層迄薄,不要直接操作原始數據

這些核心服務完成后,剩下的就是客戶端和服務端代碼煮岁,這個就可以根據實際的服務去自由發(fā)揮了讥蔽,對于 api,我們也可以把客戶端代碼稱之為 SDK画机,同時呢冶伞,為了方便以后的開發(fā)維護,可以統(tǒng)一編寫自動化工具生成色罚,對于不同語言對應的做支持


OK 了碰缔,上篇就先寫到這里吧,主要說了對于 server 框架以及 IDL 的設計選擇思路

下篇呢戳护,會主要對于 api 的版本控制金抡,發(fā)布瀑焦,以及一些自動化工具進行一些分享

From: 一名熱愛動漫的攻城獅

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市梗肝,隨后出現的幾起案子榛瓮,更是在濱河造成了極大的恐慌,老刑警劉巖巫击,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件禀晓,死亡現場離奇詭異,居然都是意外死亡坝锰,警方通過查閱死者的電腦和手機粹懒,發(fā)現死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顷级,“玉大人凫乖,你說我怎么就攤上這事」保” “怎么了帽芽?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長翔冀。 經常有香客問我导街,道長,這世上最難降的妖魔是什么纤子? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任搬瑰,我火速辦了婚禮,結果婚禮上计福,老公的妹妹穿的比我還像新娘跌捆。我一直安慰自己徽职,他們只是感情好象颖,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姆钉,像睡著了一般说订。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潮瓶,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天陶冷,我揣著相機與錄音,去河邊找鬼毯辅。 笑死埂伦,一個胖子當著我的面吹牛,可吹牛的內容都是我干的思恐。 我是一名探鬼主播沾谜,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼膊毁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了基跑?” 一聲冷哼從身側響起婚温,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎媳否,沒想到半個月后栅螟,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡篱竭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年力图,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掺逼。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡搪哪,死狀恐怖,靈堂內的尸體忽然破棺而出坪圾,到底是詐尸還是另有隱情晓折,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布兽泄,位于F島的核電站漓概,受9級特大地震影響,放射性物質發(fā)生泄漏病梢。R本人自食惡果不足惜胃珍,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜓陌。 院中可真熱鬧觅彰,春花似錦、人聲如沸钮热。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽隧期。三九已至飒责,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仆潮,已是汗流浹背宏蛉。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留性置,地道東北人拾并。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗅义。 傳聞我的和親對象是個殘疾皇子个榕,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現芥喇,斷路器西采,智...
    卡卡羅2017閱讀 134,719評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,336評論 25 707
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,868評論 6 342
  • 文|趙曉璃 寫在前面的話: 幾天前武通,一篇《醒醒吧霹崎,月入3000的年輕人,你已經沒救了》的推文在朋友圈瘋傳冶忱。 文中堆...
    趙曉璃閱讀 1,957評論 6 54
  • 你是我的遺憾 是風尾菇,是夢 如風般溫柔 吹過生命里的荒野 低低掠過 所到之處麥草拔節(jié) 待到這里再不荒蕪 便直直離去 ...
    遺落在秋風中的一抹殘葉閱讀 177評論 0 2