go語言實戰教程之 後臺管理頁面統計功能開發(1)

qfDavie發表於2019-04-11

本節內容我們將學習開發實現後臺管理平臺頁面統計功能開發的功能介面,本章節內容將涉及到多種請求路由的方式。

功能介紹

後臺管理平臺不僅是功能管理平臺,同時還是資料管理平臺。從資料管理平臺角度來說,在管理平臺中需要提供對平臺各項資料的實時跟蹤和監測,以方便管理員使用者能夠看到平臺資料走勢,在後臺功能中主介面,提供了展示使用者、管理員、商品等多種資料的統計情況。如下圖所示: go語言實戰教程之 後臺管理頁面統計功能開發(1)

在上面的圖中,我們可以看到涉及的統計及類別是多種資料型別,總結歸納主要有以下幾類:

  • 當日增長資料(使用者、訂單、管理員)

  • 總資料統計(使用者、訂單、管理員)

  • 圖表資料統計(使用者、訂單、管理員) 在最後一個類別的圖示資料統計當中,圖表展示最近一個周的三種資料的增長情況,這裡的最近一週的日期是在不斷變化的。

介面請求分析

在看到上述功能效果並進行功能分析以後,我們從請求出發,對統計資料介面進行分類。首先開啟瀏覽器右上角的擴充套件功能,找到更多工具,選擇開發者工具,開啟除錯工具。如下圖所示: go語言實戰教程之 後臺管理頁面統計功能開發(1)

go語言實戰教程之 後臺管理頁面統計功能開發(1) 我們可以通過介面詳情請求的內容看到介面請求詳情,供我們來進行開發使用,主要關注介面請求詳情種的幾個資料:

  • 請求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}用來表示日期。

本節內容我們對統計功能做了分類和分析,並著手建立了我們整體的程式碼邏輯,下節內容我們將具體實現這些功能介面的程式碼開發。


相關文章