D在這個(gè)Demo中,我們有四個(gè)應(yīng)用級(jí)別的服務(wù), Plus Service幢痘,Calc Service,Lookup Service還有UAA。
下面分別介紹Demo中的模塊
1.Swagger
Swagger 是一個(gè)牛逼的文檔管理工具悯辙, 這里我們是用做設(shè)計(jì)驅(qū)動(dòng),做了很多項(xiàng)目迎吵,尤其是對(duì)外(也許只是給其他開發(fā))提供REST服務(wù)的項(xiàng)目躲撰。痛點(diǎn)就是Design與實(shí)現(xiàn)不同,實(shí)現(xiàn)與文檔不同击费,不能方便的測(cè)試REST API拢蛋。 Swagger在一定程度上解決了這個(gè)問(wèn)題。這里我的思路是荡灾,API Designer 設(shè)計(jì)發(fā)布Swagger definition file瓤狐。利用Swagger Codegen 自動(dòng)生成接口代碼(這里主要是java spring,在每一次build的時(shí)候批幌,重新生成代碼)础锐,開發(fā)人員實(shí)現(xiàn)接口。當(dāng)designer 修改swagger definition file后荧缘,通知開發(fā)人員(當(dāng)然也可以不通知)皆警,接口變化,會(huì)體現(xiàn)在開發(fā)的一次build截粗。
2.User
Springboot項(xiàng)目信姓。實(shí)現(xiàn)用戶的CURD
3.UAA
SpringBoot項(xiàng)目。依賴User模塊绸罗,通過(guò)OAuth2+JWT實(shí)現(xiàn)對(duì)User API的訪問(wèn)意推。
4.JWT Public
由于UAA提供了JWT的token,其他項(xiàng)目可以參照J(rèn)WT的原理是JWT Plulic的公共方法來(lái)對(duì)JWT進(jìn)行驗(yàn)證珊蟀。
5.Admin Dashboard
SpringBoot項(xiàng)目由于demo大量使用springboot菊值,這個(gè)模塊是對(duì)spingboot admin的引用。育灸。
6.Manage Service
SpringBoot項(xiàng)目腻窒。依賴Admin Dashboard,引用Spring Cloud Config磅崭,提供Springcloud的配置儿子,管理。
7.Plus Service
Express.js 項(xiàng)目砸喻。
REST Service:
? ? GET /plus?a=1&b=3? 返回4
8.Calc Service
SpringBoot項(xiàng)目柔逼。
REST Service:
? ? GET /calc/plus?a=1&b=3 返回4蒋譬,此服務(wù)通過(guò)調(diào)用Plus Service完成。
? ? GET /calc/multiply?a=2&b=6 返回6卒落。
9.Lookup Service
SpringBoot項(xiàng)目羡铲。
REST Service:
? ? GET /iplookup 返回當(dāng)前請(qǐng)求的IP地址
? ? GET /from 返回from屬性的來(lái)源(驗(yàn)證是否可以從manage service 獲取配置)
10.Kong
API gateway, 用來(lái)對(duì)外發(fā)布服務(wù)。 其他模塊要將自己的服務(wù)注冊(cè)到kong儡毕, 沒有什么自己的代碼可以寫也切。對(duì)于來(lái)自公網(wǎng)的請(qǐng)求,必須先通過(guò)API gateway腰湾,內(nèi)部請(qǐng)求雷恃,我們這里就不在走api gateway了,也不對(duì)服務(wù)之間調(diào)用進(jìn)行授權(quán)認(rèn)證费坊。同時(shí)為了簡(jiǎn)單省事倒槐,這些發(fā)布到公網(wǎng)的URL做了粉飾。讓他們看起來(lái)更像一個(gè)統(tǒng)一的服務(wù)附井。
發(fā)布到公網(wǎng)的服務(wù):
? ? GET /api/v1/direct/plus?a=1&b=3 轉(zhuǎn)發(fā)給Plus Service
? ? GET /api/v1/plus?a=1&b=3 轉(zhuǎn)發(fā)給Calc Service
? ? GET /api/v1/multiply?a=2&b=3 轉(zhuǎn)發(fā)給Calc Service
? ? GET /api/v1/iplookup? 轉(zhuǎn)發(fā)給Lookup Service
? ? GET /api/v1/from ?轉(zhuǎn)發(fā)給Lookup Service