本節內容我們將學習開發實現后台管理平台頁面統計功能開發的功能接口,本章節內容將涉及到多種請求路由的方式。
功能介紹
后台管理平台不僅是功能管理平台,同時還是數據管理平台。從數據管理平台角度來說,在管理平台中需要提供對平台各項數據的實時跟蹤和監測,以方便管理員用戶能夠看到平台數據走勢,在后台功能中主界面,提供了展示用戶、管理員、商品等多種數據的統計情況。如下圖所示:
在上面的圖中,我們可以看到涉及的統計及類別是多種數據類型,總結歸納主要有以下幾類:
-
當日增長數據(用戶、訂單、管理員)
-
總數據統計(用戶、訂單、管理員)
-
圖表數據統計(用戶、訂單、管理員) 在最后一個類別的圖標數據統計當中,圖表展示最近一個周的三種數據的增長情況,這里的最近一周的日期是在不斷變化的。
接口請求分析
在看到上述功能效果並進行功能分析以后,我們從請求出發,對統計數據接口進行分類。首先打開瀏覽器右上角的擴展功能,找到更多工具,選擇開發者工具,打開調試工具。如下圖所示:
我們可以通過接口詳情請求的內容看到接口請求詳情,供我們來進行開發使用,主要關注接口請求詳情種的幾個數據:
-
請求URL:用於表示向后台進行唯一的請求標識,能夠通過路由進行唯一的識別。在具體的請求接口中,Request URL中除去主機域名部分就是請求的url。
-
請求類型:在之前課程中,我們已經講過多種請求類型,GET、POST等。在具體的請求接口中,Request Method所對應的值就是請求類型。
-
請求攜帶數據格式:該字段用於表示在請求時,以什么樣的方式向服務器提交數據,或者說該字段規定了向服務器提交什么類型的數據。在具體的請求接口中,Content-Type字段用於指定向服務器提交什么類型的數據,支持的數據格式有如下可選項:
-
Form表單:application/x-www-form-urlencoded,application/form-data
-
Json:application/json
-
Javascript:application/javascript
-
XML: application/xml
-
-
請求數據:具體的向服務器提交的請求數據內容。
知道了這幾項內容,我們就能夠在后台進行開發我們的代碼。
接口統計及分類
了解完接口請求重要的數據和請求數據類型以后,我們可以將統計模塊中的這些數據請求接口進行梳理,並進行分類。方便我們服務器進行分類處理。經過梳理,我們會發現,一共有三類請求接口類型:
-
當日增長數據接口請求:
-
當日用戶增長數據接口請求:/statis/user/NaN-NaN-NaN/count
-
當日訂單增長數據接口請求:/statis/order/NaN-NaN-NaN/count
-
當日管理員增長數據接口請求:/statis/admin/NaN-NaN-NaN/count
-
-
總記錄數據接口請求:
-
用戶總數接口請求:/v1/users/count
-
訂單總數接口請求:/bos/orders/count
-
管理員總數接口請求:/admin/count
-
-
近7日每天增長數據接口請求:
-
近7日每天的用戶增長數據接口請求:/statis/user/2019-04-05/count (2019-04-05值會按照最近1周每天的日期進行變化)
-
近7日每天的訂單增長數據接口請求:/statis/order/2019-04-05/count (2019-04-05值會按照最近1周每天的日期進行變化)
-
近7日每天的管理員增長數據接口請求:/statis/admin/2019-04-05/count (2019-04-05值會按照最近1周每天的日期進行變化)
-
統計模塊實現數據統計請求處理
經過如上的分析,我們已經能夠看到,三類數據請求中,其中有兩類使用/statis前綴來進行數據接口請求。按照項目模塊化開發的原則,我們做如下實現:
-
新創建統計模塊功能,用於實現統計功能的接口數據請求;
-
總記錄數據接口請求,在各自的功能模塊中進行實現。
經過如上的方案分析,我們要創建統計模塊了。
統計模塊控制器(StatisController)
既然是一個全新的模塊,我們就使用mvc來構建實現請求邏輯處理和業務功能實現。首先,就要定義統計模塊控制器,代碼定義如下:
type StatisController struct {
//上下文環境對象
Ctx iris.Context
//統計功能的服務實現接口
Service service.StatisService
//session
Session *sessions.Session
}
業務功能實現(StatisService)
如上的StatisController控制器,僅僅是負責進行請求業務邏輯處理,重要的邏輯功能實現,需要在數據功能提供者中實現,這里就是我們定義的StatisService。比如StatisService向外提供以下功能接口及定義:
type StatisService interface {
//查詢某一天的用戶的增長數量
GetUserDailyCount(date string) int64
GetOrderDailyCount(date string) int64
GetAdminDailyCount(date string) int64
}
上述StatisService僅僅是接口標准的定義。為了實現代碼的解耦,我們通過另外的實現定義來對接口進行功能實現,如下所示:
type statisService struct {
Engine *xorm.Engine
}
該statisService即是我們定義的實現StatisService接口的結構體,該結構體會實現上述StatisService的三個所有方法,並完成具體的業務邏輯,具體的代碼開發我們下節課內容講解。
路由組解析及mvc模塊綁定
當我們搭建好StatisController以及StatisService時,我們需要讓我們的控制器為我們工作起來,用來接受我們的瀏覽器請求,我們需要在我們的程序啟動處,通過mvc配置將我們的StatisControll和app對象綁定起來。如下綁定操作:
statisService := service.NewStatisService(engine)
statis := mvc.New(app.Party("/statis/{model}/{date}/"))
statis.Register(
statisService,
sessManager.Start,
)
statis.Handle(new(controller.StatisController))
正則表達式識別請求
在上文我們對請求做分析分類時,我們說到了在進行請求統計時,會有日期變化的url請求,也有不同模塊的請求。如何解析動態變量的url請求?我們這里就運用到了之前的學習知識正則表達式識別請求。
app.Party("/statis/{model}/{date}/")
該路由組就可以識別以statis開頭的請求,{model}用來區分表示模塊,具體取值有admin、order、user。{date}用來表示日期。