哪些專門做批發(fā)的網(wǎng)站有哪些短網(wǎng)址鏈接生成
目錄
一、軟件開發(fā)整體介紹
1. 軟件開發(fā)流程
1 第1階段: 需求分析
2 第2階段: 設(shè)計
3 第3階段: 編碼
4 第4階段: 測試
5 第5階段: 上線運維
2. 角色分工
3. 軟件環(huán)境
1 開發(fā)環(huán)境(development)
2 測試環(huán)境(testing)
3 生產(chǎn)環(huán)境(production)
二、蒼穹外賣項目介紹
1. 項目介紹
2. 產(chǎn)品原型
3. 技術(shù)選型
三、開發(fā)環(huán)境搭建
1. 前端環(huán)境搭建
2. 后端環(huán)境搭建
1 熟悉項目結(jié)構(gòu)
1 使用idea打開項目
2 項目結(jié)構(gòu)說明
2 Git版本控制
1 準(zhǔn)備遠程倉庫
2 初始化Git本地倉庫
?編輯
3 提交并推送到遠程倉庫
(2) 添加到暫存區(qū)
(3) 提交到本地倉庫
(4) 推送到遠程倉庫
3 準(zhǔn)備數(shù)據(jù)庫環(huán)境
(1) 執(zhí)行SQL腳本
(2)?配置數(shù)據(jù)庫密碼
(3) 表的說明
3. 前后端聯(lián)調(diào)和nginx
1 debug跟蹤登錄功能
2 nginx反向代理
(1) 反向代理介紹
(2) nginx反向代理的好處【重點】
(3) nginx反向代理的配置
(4) nginx負載均衡的配置
3.3 nginx小結(jié)
4. 完善登錄功能
四、導(dǎo)入接口文檔
五、Swagger
1. 介紹
2. 使用步驟
3. 常用注解
?編輯
4. yapi和Swagger的區(qū)別
5. 小結(jié)
克隆地址:魁(代碼疑點)/sky-take-out
一、軟件開發(fā)整體介紹
作為一名軟件開發(fā)工程師,我們需要了解在軟件開發(fā)過程中的開發(fā)流程, 以及軟件開發(fā)過程中涉及到的崗位角色,角色的分工、職責(zé), 并了解軟件開發(fā)中涉及到的三種軟件環(huán)境。那么這一小節(jié),我們將從 軟件開發(fā)流程、角色分工、軟件環(huán)境 三個方面整體介紹一下軟件開發(fā)。
1. 軟件開發(fā)流程
graph LR
需求分析-->設(shè)計
設(shè)計-->UI設(shè)計 & 接口設(shè)計 & 數(shù)據(jù)庫設(shè)計 -->編碼
編碼-->前端編碼-->前端自測-->聯(lián)調(diào)
編碼-->后端編碼-->后端自測-->聯(lián)調(diào)
聯(lián)調(diào)-->測試-->上線運維
1 第1階段: 需求分析
完成需求規(guī)格說明書、產(chǎn)品原型編寫。
需求規(guī)格說明書, 一般來說就是使用 Word 文檔來描述當(dāng)前項目的各個組成部分,如:系統(tǒng)定義、應(yīng)用環(huán)境、功能規(guī)格、性能需求等,都會在文檔中描述。例如:
產(chǎn)品原型,一般是通過網(wǎng)頁(html)的形式展示當(dāng)前的頁面展示什么樣的數(shù)據(jù), 頁面的布局是什么樣子的,點擊某個菜單,打開什么頁面,點擊某個按鈕,出現(xiàn)什么效果,都可以通過產(chǎn)品原型看到。 例如:
2 第2階段: 設(shè)計
設(shè)計的內(nèi)容包含 UI設(shè)計、數(shù)據(jù)庫設(shè)計、接口設(shè)計。
UI設(shè)計
用戶界面的設(shè)計,主要設(shè)計項目的頁面效果,小到一個按鈕,大到一個頁面布局,還有人機交互邏輯的體現(xiàn)。例如:
數(shù)據(jù)庫設(shè)計
需要設(shè)計當(dāng)前項目中涉及到哪些數(shù)據(jù)庫,每一個數(shù)據(jù)庫里面包含哪些表,這些表結(jié)構(gòu)之間的關(guān)系是什么樣的,表結(jié)構(gòu)中包含哪些字段。例如:
接口設(shè)計
通過分析原型圖,首先,粗粒度地分析每個頁面有多少接口,然后,再細粒度地分析每個接口的傳入?yún)?shù),返回值參數(shù),同時明確接口路徑及請求方式
3 第3階段: 編碼
編寫項目代碼、并完成單元測試。
項目代碼編寫:作為軟件開發(fā)工程師,我們需要對項目的模塊功能分析后,進行編碼實現(xiàn)。
單元測試:編碼實現(xiàn)完畢后,進行單元測試,單元測試通過后再進入到下一階段。例如:
4 第4階段: 測試
在該階段中主要由測試人員, 編寫測試用例, 對部署在測試環(huán)境的項目進行功能測試, 并出具測試報告。
5 第5階段: 上線運維
在項目上線之前, 會由運維人員準(zhǔn)備服務(wù)器上的軟件環(huán)境安裝、配置, 配置完畢后, 再將我們開發(fā)好的項目,部署在服務(wù)器上運行。
2. 角色分工
在對整個軟件開發(fā)流程熟悉后, 我們還有必要了解一下在整個軟件開發(fā)流程中涉及到的崗位角色,以及各個角色的職責(zé)分工。
在實際的項目中, 有一些項目組由于人員配置緊張, 可能并沒有專門的架構(gòu)師或測試人員, 這個時候可能需要有項目經(jīng)理或者程序員兼任
????????
3. 軟件環(huán)境
作為軟件開發(fā)工程師,在編碼的過程中就不可避免地會接觸多種軟件環(huán)境,我們主要來分析在工作中經(jīng)常遇到的三套環(huán)境, 分別是: 開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境。 接下來,我們分別介紹一下這三套環(huán)境的作用和特點。
1 開發(fā)環(huán)境(development)
我們作為軟件開發(fā)人員,在開發(fā)階段使用的環(huán)境,就是開發(fā)環(huán)境,一般外部用戶無法訪問。
比如,我們在開發(fā)中使用的MySQL數(shù)據(jù)庫和其他的一些常用軟件,我們可以安裝在本地, 也可以安裝在一臺專門的服務(wù)器中, 這些應(yīng)用軟件僅僅在軟件開發(fā)過程中使用, 項目測試、上線時,我們不會使用這套環(huán)境了,這個環(huán)境就是開發(fā)環(huán)境。
2 測試環(huán)境(testing)
當(dāng)軟件開發(fā)工程師,將項目的功能模塊開發(fā)完畢,并且單元測試通過后,就需要將項目部署到測試服務(wù)器上,讓測試人員對項目進行測試。那這臺測試服務(wù)器就是專門給測試人員使用的環(huán)境, 也就是測試環(huán)境,用于項目測試,一般外部用戶無法訪問。
3 生產(chǎn)環(huán)境(production)
當(dāng)項目開發(fā)完畢,并且由測試人員測試通過之后,就可以上線項目,將項目部署到線上環(huán)境,并正式對外提供服務(wù),這個線上環(huán)境也稱之為生產(chǎn)環(huán)境。
application-dev.yaml:配置 開發(fā)環(huán)境的各種參數(shù),比如開發(fā)環(huán)境的數(shù)據(jù)庫地址
application-test.yaml:配置 測試環(huán)境的各種參數(shù),比如測試環(huán)境的數(shù)據(jù)庫地址
application.prod.yaml:配置 生產(chǎn)環(huán)境的各種參數(shù),比如生產(chǎn)環(huán)境的數(shù)據(jù)庫地址
程序部署到哪個環(huán)境,就激活對應(yīng)的配置文件:
-
java -jar -Dspring.profiles.active=dev xxx.jar 啟動程序并激活dev環(huán)境的配置
二、蒼穹外賣項目介紹
到公司里邊,需要給你提供 遠程倉庫的地址、并給你的git帳號開通權(quán)限。如果沒有權(quán)限,是不能克隆的
獲取本地倉庫:
-
克隆遠程倉庫,得到本地倉庫。 這種倉庫里邊已經(jīng)包含了 遠程倉庫的地址信息
-
本地初始化倉庫,這種倉庫沒有關(guān)聯(lián)遠程倉庫,需要添加遠程倉庫的信息 git remote add 簡稱代號 地址
切換分支,在分支里編寫代碼:
-
開發(fā)中,通常是要完成一個功能,就先拉取一個分支;要修改一個bug,需要先拉取一個分支
-
在分支里編寫代碼并提交,可以推送
-
把分支代碼合并到 主開發(fā)分支
推送到遠程倉庫:
-
推送到遠程倉庫:git push origin 分支名
-
獲取最新的代碼:git pull origin 分支名
1. 項目介紹
本項目(蒼穹外賣)是專門為餐飲企業(yè)(餐廳、飯店)定制的一款軟件產(chǎn)品,包括 系統(tǒng)管理后臺 和 小程序端應(yīng)用 兩部分。其中系統(tǒng)管理后臺主要提供給餐飲企業(yè)內(nèi)部員工使用,可以對餐廳的分類、菜品、套餐、訂單、員工等進行管理維護,對餐廳的各類數(shù)據(jù)進行統(tǒng)計,同時也可進行來單語音播報功能。小程序端主要提供給消費者使用,可以在線瀏覽菜品、添加購物車、下單、支付、催單等。
接下來,通過功能架構(gòu)圖來展示管理端和用戶端的具體業(yè)務(wù)功能模塊。
1. 管理端功能
員工登錄/退出 , 員工信息管理 , 分類管理 , 菜品管理 , 套餐管理 , 菜品口味管理 , 訂單管理 ,數(shù)據(jù)統(tǒng)計,來單提醒。
2. 用戶端功能
微信登錄 , 收件人地址管理 , 用戶歷史訂單查詢 , 菜品規(guī)格查詢 , 購物車功能 , 下單 , 支付、分類及菜品瀏覽。
2. 產(chǎn)品原型
產(chǎn)品原型,用于展示項目的業(yè)務(wù)功能,一般由產(chǎn)品經(jīng)理進行設(shè)計。
注意事項: 產(chǎn)品原型主要用于展示項目的功能,并不是最終的頁面效果。
1. 管理端
餐飲企業(yè)內(nèi)部員工使用。 主要功能有:
2. 用戶端
移動端應(yīng)用主要提供給消費者使用。主要功能有:
3. 技術(shù)選型
關(guān)于本項目的技術(shù)選型, 我們將會從 用戶層、網(wǎng)關(guān)層、應(yīng)用層、數(shù)據(jù)層 這幾個方面進行介紹,主要用于展示項目中使用到的技術(shù)框架和中間件等。
1). 用戶層
本項目中在構(gòu)建系統(tǒng)管理后臺的前端頁面,我們會用到H5、Vue.js、ElementUI、apache echarts(展示圖表)等技術(shù)。而在構(gòu)建移動端應(yīng)用時,我們會使用到微信小程序。
2). 網(wǎng)關(guān)層
Nginx是一個服務(wù)器,主要用來作為Http服務(wù)器,部署靜態(tài)資源,訪問性能高。在Nginx中還有兩個比較重要的作用: 反向代理和負載均衡, 在進行項目部署時,要實現(xiàn)Tomcat的負載均衡,就可以通過Nginx來實現(xiàn)。
3). 應(yīng)用層
SpringBoot: 快速構(gòu)建Spring項目, 采用 "約定優(yōu)于配置" 的思想, 簡化Spring項目的配置開發(fā)。
SpringMVC:SpringMVC是spring框架的一個模塊,springmvc和spring無需通過中間整合層進行整合,可以無縫集成。
Spring Task: 由Spring提供的定時任務(wù)框架。
httpclient: 主要實現(xiàn)了對http請求的發(fā)送。
Spring Cache: 由Spring提供的數(shù)據(jù)緩存框架
JWT: 用于對應(yīng)用程序上的用戶進行身份驗證的標(biāo)記。
阿里云OSS: 對象存儲服務(wù),在項目中主要存儲文件,如圖片等。
Swagger: 可以自動的幫助開發(fā)人員生成接口文檔,并對接口進行測試。
POI: 封裝了對Excel表格的常用操作。
WebSocket: 一種通信網(wǎng)絡(luò)協(xié)議,使客戶端和服務(wù)器之間的數(shù)據(jù)交換更加簡單,用于項目的來單、催單功能實現(xiàn)。
4). 數(shù)據(jù)層
MySQL: 關(guān)系型數(shù)據(jù)庫, 本項目的核心業(yè)務(wù)數(shù)據(jù)都會采用MySQL進行存儲。
Redis: 基于key-value格式存儲的內(nèi)存數(shù)據(jù)庫, 訪問速度快, 經(jīng)常使用它做緩存。
Mybatis: 本項目持久層將會使用Mybatis開發(fā)。
pagehelper: 分頁插件。
spring data redis: 簡化java代碼操作Redis的API。
5). 工具
git: 版本控制工具, 在團隊協(xié)作中, 使用該工具對項目中的代碼進行管理。
maven: 項目構(gòu)建工具。
junit:單元測試工具,開發(fā)人員功能實現(xiàn)完畢后,需要通過junit對功能進行單元測試。
postman: 接口測工具,模擬用戶發(fā)起的各類HTTP請求,獲取對應(yīng)的響應(yīng)結(jié)果。
三、開發(fā)環(huán)境搭建
開發(fā)環(huán)境搭建主要包含前端環(huán)境和后端環(huán)境兩部分。作為服務(wù)端開發(fā)工程師, 我們課程學(xué)習(xí)的重心應(yīng)該放在后端的業(yè)務(wù)代碼上, 前端的頁面我們只需要導(dǎo)入資料中的nginx, 前端頁面的代碼我們只需要能看懂即可。
1. 前端環(huán)境搭建
1). 前端工程基于 nginx
從資料中找到前端運行環(huán)境的nginx,移動到非中文目錄下。
sky目錄中存放了管理端的前端資源,具體如下:
2). 啟動nginx,訪問測試
雙擊 nginx.exe 即可啟動 nginx 服務(wù),訪問端口號為 80
http://localhost:80
2. 后端環(huán)境搭建
1 熟悉項目結(jié)構(gòu)
1 使用idea打開項目
后端工程基于 maven 進行項目構(gòu)建,并且進行分模塊開發(fā)。
1). 從當(dāng)天資料中找到后端初始工程:
2). 用 IDEA 打開初始工程,了解項目的整體結(jié)構(gòu):
2 項目結(jié)構(gòu)說明
對工程的每個模塊作用說明:
對項目整體結(jié)構(gòu)了解后,接下來我們詳細分析上述的每個子模塊:
sky-common模塊
模塊中存放的是一些公共類,可以供其他模塊使用
分析sky-common模塊的每個包的作用:
sky-pojo模塊
模塊中存放的是一些 entity、DTO、VO
分析sky-pojo模塊的每個包的作用:
sky-server模塊
模塊中存放的是 配置文件、配置類、攔截器、controller、service、mapper、啟動類等
2 Git版本控制
1 準(zhǔn)備遠程倉庫
1.訪問Gitee - 基于 Git 的代碼托管和研發(fā)協(xié)作平臺,新建倉庫
2 初始化Git本地倉庫
3 提交并推送到遠程倉庫
1) 準(zhǔn)備忽略文件
(2) 添加到暫存區(qū)
右鍵模塊? --? Git -- Add
(3) 提交到本地倉庫
(4) 推送到遠程倉庫
成功推送至遠程倉庫
3 準(zhǔn)備數(shù)據(jù)庫環(huán)境
(1) 執(zhí)行SQL腳本
今天的資料中有數(shù)據(jù)庫腳本:
sql文件,到數(shù)據(jù)庫執(zhí)行
(2)?配置數(shù)據(jù)庫密碼
yml配置文件修改本地數(shù)據(jù)庫賬戶和密碼
(3) 表的說明
3. 前后端聯(lián)調(diào)和nginx
1 debug跟蹤登錄功能
后端的初始工程中已經(jīng)實現(xiàn)了登錄功能,直接進行前后端聯(lián)調(diào)測試即可
實現(xiàn)思路:
2 nginx反向代理
對登錄功能測試完畢后,接下來,我們思考一個問題:前端發(fā)送的請求,是如何請求到后端服務(wù)的?
前端請求地址:http://localhost/api/employee/login
后端接口地址:http://localhost:8080/admin/employee/login
很明顯,兩個地址不一致,那是如何請求到后端服務(wù)的呢?
nginx介紹
nginx:Engine X,俄羅斯人開發(fā)的一個軟件,早期作為郵件收發(fā)的服務(wù)器代理。隨著后來的發(fā)展,也提供了其它的功能:
-
部署靜態(tài)資源,供客戶端訪問
-
作為反向代理服務(wù)器,實現(xiàn)負載均衡
-
作為郵件收發(fā)的服務(wù)器
(1) 反向代理介紹
nginx 反向代理,就是將前端發(fā)送的動態(tài)請求由 nginx 轉(zhuǎn)發(fā)到后端服務(wù)器
那為什么不直接通過瀏覽器直接請求后臺服務(wù)端,需要通過nginx反向代理呢?
(2) nginx反向代理的好處【重點】
-
提高訪問速度
因為nginx本身可以進行緩存,如果訪問的同一接口,并且做了數(shù)據(jù)緩存,nginx就直接可把數(shù)據(jù)返回,不需要真正地訪問服務(wù)端,從而提高訪問速度。
-
進行負載均衡
所謂負載均衡,就是把大量的請求按照我們指定的方式均衡的分配給集群中的每臺服務(wù)器。
-
保證后端服務(wù)安全
因為一般后臺服務(wù)地址不會暴露,所以使用瀏覽器不能直接訪問,可以把nginx作為請求訪問的入口,請求到達nginx后轉(zhuǎn)發(fā)到具體的服務(wù)中,從而保證后端服務(wù)的安全。
(3) nginx反向代理的配置
nginx 反向代理的配置方式:
server{listen 80;server_name localhost;location /api/{proxy_pass http://localhost:8080/admin/; #反向代理}
}
proxy_pass:該指令是用來設(shè)置代理服務(wù)器的地址,可以是主機名稱,IP地址加端口號等形式。
如上代碼的含義是:監(jiān)聽80端口號, 然后當(dāng)我們訪問 http://localhost:80/api/../..這樣的接口的時候,它會通過 location /api/ {} 這樣的反向代理到 http://localhost:8080/admin/上來。
# 反向代理,處理管理端發(fā)送的請求
location /api/ {proxy_pass http://localhost:8080/admin/;#proxy_pass http://webservers/admin/;
}
當(dāng)在訪問http://localhost/api/employee/login,nginx接收到請求后轉(zhuǎn)到http://localhost:8080/admin/,故最終的請求地址為http://localhost:8080/admin/employee/login,和后臺服務(wù)的訪問地址一致。
(4) nginx負載均衡的配置
當(dāng)如果服務(wù)以集群的方式進行部署時,那nginx在轉(zhuǎn)發(fā)請求到服務(wù)器時就需要做相應(yīng)的負載均衡。其實,負載均衡從本質(zhì)上來說也是基于反向代理來實現(xiàn)的,最終都是轉(zhuǎn)發(fā)請求。
nginx 負載均衡的配置方式:
upstream webservers{server 192.168.100.128:8080;server 192.168.100.129:8080;
}
server{listen 80;server_name localhost;location /api/{proxy_pass http://webservers/admin;#負載均衡}
}
upstream:如果代理服務(wù)器是一組服務(wù)器的話,我們可以使用upstream指令配置后端服務(wù)器組。
如上代碼的含義是:監(jiān)聽80端口號, 然后當(dāng)我們訪問 http://localhost:80/api/../..這樣的接口的時候,它會通過 location /api/ {} 這樣的反向代理到 http://webservers/admin,根據(jù)webservers名稱找到一組服務(wù)器,根據(jù)設(shè)置的負載均衡策略(默認是輪詢)轉(zhuǎn)發(fā)到具體的服務(wù)器。
注:upstream后面的名稱可自定義,但要上下保持一致。
nginx 負載均衡策略:
輪詢:
輪詢:
? ?upstream webservers{server 192.168.100.128:8080;server 192.168.100.129:8080;}
weight:
upstream webservers{server 192.168.100.128:8080 weight=9;server 192.168.100.129:8080 weight=1; }
ip_hash:
upstream webservers{ip_hash;server 192.168.100.128:8080;server 192.168.100.129:8080; }
least_conn:
upstream webservers{least_conn;server 192.168.100.128:8080;server 192.168.100.129:8080; }
url_hash:
upstream webservers{hash &request_uri;server 192.168.100.128:8080;server 192.168.100.129:8080; }
fair:
upstream webservers{server 192.168.100.128:8080;server 192.168.100.129:8080;fair; }
正向代理:指客戶端的代理,服務(wù)端不知道(無感知的)=>VPN翻(非法)
反向代理;指服務(wù)端的代理,客戶端不知道(無感知的)
3.3 nginx小結(jié)
nginx的作用:
-
部署靜態(tài)資源,作為靜態(tài)資源服務(wù)器
-
作為反向代理,實現(xiàn)負載均衡
nginx要部署靜態(tài)資源:把靜態(tài)資源直接放到nginx的html目錄里
nginx要作為反向代理,并實現(xiàn)負載均衡:要修改nginx.conf
nginx負載均衡策略:
-
輪詢:默認策略,不配置負載均衡策略就是輪詢。把請求輪流分發(fā)到不同的目標(biāo)服務(wù)器上
-
weith:權(quán)重模式,給每個目標(biāo)服務(wù)器設(shè)置權(quán)重值,值越大,被分發(fā)到請求的機率就越高
-
ip_hash:ip哈希,相同ip的客戶端的請求,始終被分配到某一臺服務(wù)器上
-
url_hash:url哈希,相同請求路徑url的請求,始終被分配到某一臺服務(wù)器上
-
least_conn:最少連接,哪個服務(wù)器正在處理的請求少,就分配到哪個服務(wù)器上
-
fair:公平模式,哪個服務(wù)器響應(yīng)時間短,說明服務(wù)器性能好,就多處理一些請求
4. 完善登錄功能
數(shù)據(jù)不允許存取名文密碼,安全不達標(biāo)
使用MD5算法對明文密碼加密
注意:MD5算法,不是加密算法,是數(shù)據(jù)摘要算法。在計算轉(zhuǎn)換過程中,會丟棄一部分原始數(shù)據(jù)。
特點:
-
不可逆。有密文,不可能通過算法還原出來明文
-
一個明文 經(jīng)過MD5計算的結(jié)果,總是不變的
所以:MD5不可逆,但并不是不可破解。破解的方式:準(zhǔn)備彩虹表,就是 常用明文密碼和對應(yīng)的MD5結(jié)果
將來:會使用 MD5 + 鹽 進一步提升安全性,提升破解的難度
-
修改數(shù)據(jù)庫中明文密碼,改為MD5加密后的密文
打開employee表,修改密碼。明文密碼123456,對應(yīng)的md5值是:e10adc3949ba59abbe56e057f20f883e
-
修改Java代碼,前端提交的密碼進行MD5加密后再跟數(shù)據(jù)庫中密碼比對
打開EmployeeServiceImpl.java,修改比對密碼
四、導(dǎo)入接口文檔
前后端分離
將課程資料中提供的項目接口導(dǎo)入YApi。訪問地址:【YApi非常慢】YApi Pro-高效、易用、功能強大的可視化接口管理平臺,注冊帳號并登錄
選擇蒼穹外賣-管理端接口.json導(dǎo)入
五、Swagger
1. 介紹
Swagger 是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)(API Documentation & Design Tools for Teams | Swagger)。 它的主要作用是:
-
使得前后端分離開發(fā)更加方便,有利于團隊協(xié)作。
-
接口的文檔在線自動生成,降低后端開發(fā)人員編寫接口文檔的負擔(dān)。
如果開發(fā)中接口和早期設(shè)計的接口不同,不需要花很多時間重新編寫接口文檔,Swagger會根據(jù)代碼直接生成接口文檔
-
功能測試
Spring已經(jīng)將Swagger納入自身的標(biāo)準(zhǔn),建立了Spring-swagger項目,現(xiàn)在叫Springfox。通過在項目中引入Springfox ,即可非常簡單快捷的使用Swagger。
knife4j是為Java MVC框架集成Swagger生成Api文檔的增強解決方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一樣小巧,輕量,并且功能強悍!
目前,一般都使用knife4j框架。
2. 使用步驟
-
導(dǎo)入 knife4j 的maven坐標(biāo)
在sky-pojo模塊的pom.xml中添加依賴(已添加)
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
在配置類中加入 knife4j 相關(guān)配置
在sky-server模塊中找到配置類com.sky.config.WebMvcConfiguration
,添加內(nèi)容:
/*** 通過knife4j生成接口文檔* @return
*/@Beanpublic Docket docket() {ApiInfo apiInfo = new ApiInfoBuilder().title("蒼穹外賣項目接口文檔").version("2.0").description("蒼穹外賣項目接口文檔").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("com.sky.controller")).paths(PathSelectors.any()).build();return docket;}/*** 設(shè)置靜態(tài)資源映射* @param registry
*/
protected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
訪問測試
接口文檔訪問路徑為 http://ip:port/doc.html ---> http://localhost:8080/doc.html
思考:通過 Swagger 就可以生成接口文檔,那么我們就不需要 Yapi 了?
1、Yapi 是設(shè)計階段使用的工具,管理和維護接口
2、Swagger 在開發(fā)階段使用的框架,幫助后端開發(fā)人員做后端的接口測試
3. 常用注解
通過注解可以控制生成的接口文檔,使接口文檔擁有更好的可讀性,常用注解如下:
補充:參數(shù)不是實參類:在形參上加 @ApiParam("參數(shù)描述")
//實體類
@ApiModel(description = "員工登錄時傳遞的數(shù)據(jù)模型")
public class EmployeeLoginDTO implements Serializable {}//實體類
@ApiModel(description = "員工登錄返回的數(shù)據(jù)格式")
public class EmployeeLoginVO implements Serializable {//實體類的變量@ApiModelProperty("主鍵值")private Long id;@ApiModelProperty("用戶名")private String userName;@ApiModelProperty("姓名")private String name;@ApiModelProperty("jwt令牌")private String token;}--------------------------//Controller類
@Api(tags = "員工相關(guān)接口")
public class EmployeeController {//Controller類類里的方法@ApiOperation("員工退出")public Result<String> logout() {}}
在啟動服務(wù):訪問http://localhost:8080/doc.html
4. yapi和Swagger的區(qū)別
兩者的共同點:都是API接口文檔
不同點:
-
YApi側(cè)重于功能開發(fā)之前,設(shè)置API接口;Swagger側(cè)重于功能實現(xiàn)之后,生成接口文檔
-
YApi僅僅是設(shè)計接口,可以給前端用于Mock測試;Swagger可以給后端開發(fā)人員,用于功能測試
5. 小結(jié)
項目如果整合了Swagger,在開發(fā)中需要添加注解:
-
Controller類上加注解
@Api(tags="Controller類的描述")
-
Controller類里方法上加注解
@ApiOperation("方法的描述")
-
Controller類里方法參數(shù):
-
參數(shù)是實體類
實體類上加
@ApiModel(decription="實體類的描述")
類里的各種屬性上加
@ApiModelProperty("屬性的描述")
-
參數(shù)不是實參類:在形參上加
@ApiParam("參數(shù)描述")
-
Swagger會根據(jù)我們代碼里配置的注解,自動生成接口文檔;也可以直接進行功能測試