beego搭建api服務

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

beego介紹

beego是一個Golang實現的開源Go應用開發架構,他可以用來快速開發 API、Web 及後端服務等各種應用,是一個 RESTful的架構,主要設計構想來源於tornado、sinatra和flask這三個架構,但是結合了Go本身的一些特性(interface、struct 嵌入等)而設計的一個架構。

Beego Framework:
一個使用 Go 的思維來協助您構建並開發 Go 應用程式的開源架構
beego簡介

beego安裝, bee命令

安裝beego

#go get github.com/astaxie/beego

安裝bee工具,bee工具是一個為了協助快速開發beego項目而建立的項目,可以通過bee快速建立項目、實現熱編譯、開發測試以及開發完之後打包發布的一整套從建立、開發到部署的方案。

#go get github.com/beego/bee

bee命令預設安裝在$GOPATH/bin下,把這個路徑添加到PATH中。

實踐中主要用到bee的三個子命令:api,run,pack。

  1. api命令用來建立api應用,產生預設beego api應用程式框架。

    # bee api snmpcheck# tree snmpcheck/snmpcheck/├── conf│   └── app.conf├── controllers│   ├── object.go│   └── user.go├── docs│   └── doc.go├── main.go├── models│   ├── object.go│   └── user.go├── routers│   └── router.go└── tests└── default_test.go

    其中,routers/router.go是路由的相關配置,controllers目錄下存放各個api路由下相關的控制器。

  2. run命令用來編譯運行beego工程,並通過fsnotify監控源碼的改動,實現熱編譯,開發過程中就可以即時的看到項目修改之後的效果。

    # bee runbee   :1.4.1beego :1.6.1Go    :go version go1.5.1 linux/amd64[INFO] Uses 'snmpcheck' as 'appname'[INFO] Initializing watcher...[TRAC] Directory(/home/lab/src/snmpcheck/controllers)[TRAC] Directory(/home/lab/src/snmpcheck)[TRAC] Directory(/home/lab/src/snmpcheck/models)[TRAC] Directory(/home/lab/src/snmpcheck/routers)[TRAC] Directory(/home/lab/src/snmpcheck/tests)[INFO] Start building...[SUCC] Build was successful[INFO] Restarting snmpcheck ...[INFO] ./snmpcheck is running...[parser.go:61][I] /home/lab/src/snmpcheck/controllers no changed [parser.go:61][I] /home/lab/src/snmpcheck/controllers no changed [asm_amd64.s:1696][I] http server Running on :7070
  3. pack命令用來發布應用的時候打包。

    # bee packapp path: /home/lab/src/snmpcheckbuild snmpcheckGOOS linux GOARCH amd64build successexclude relpath prefix: .exclude relpath suffix: .go:.DS_Store:.tmpfile write to `/home/lab/src/snmpcheck/snmpcheck.tar.gz`

    打包完的tar包中有應用的可執行檔和設定檔,部署時直接上傳這個tar包即可。

    # tar -tf snmpcheck.tar.gz snmpcheckconf/app.conf

restful路由

beego的路由設定比較靈活,包括固定路由,正則匹配路由,以及通過go反射機制實現的自動路由(可能會導致效能損耗,不推薦使用這種路由設定方式)和註解路由。

實踐中使用比較方便的註解路由方式。註解路由的使用:

  1. 首先在router中用namespace方式註冊控制器。這裡在/v1/user下,匯入UserController控制器。

    ns := beego.NewNamespace("/v1",    ...    beego.NSNamespace("/user",        beego.NSInclude(            &controllers.UserController{},        ),    ),    ...)beego.AddNamespace(ns)
  2. 在控制器中對應方法上用註解方式註冊路由。

    // @Title logout// @Description Logs out current logged in user session// @Success 200 {string} logout success// @router /logout [get]func (u *UserController) Logout() {    u.Data["json"] = "logout success"    u.ServeJSON()}

    註解路由使用關鍵字***@router***。
    這裡"@router /logout [get]"註冊了"Get /v1/user/logout -> UserController.Logout()"這樣的路由。
    如果beego運行在dev模式(可以在conf中配置),routers目錄下會產生路由經過解析後的結果commentsRouter.go,調試時可以作為參考。

進程內監控

beego提供了應用資訊的監控和展示,可以查看即時資訊比如qps,健康情況,程式效能相關(goroutine,gc,cpu等),可以查看靜態資訊比如路由配置,conf配置資訊,過濾器資訊,還可以查看和觸發任務。
進程監控預設是關閉的,可以通過簡單的配置中開啟,很方便:

EnableAdmin = trueAdminHttpAddr = 0.0.0.0 #預設監聽地址是localhostAdminHttpPort = 8088

這樣,應用啟動後,會在8088連接埠提供監控展示服務。

自動化文檔

beego通過swagger和內部的注釋解析能夠實現自動文檔的效果,使用方法:

  1. routers/router.go中路由只能使用namespace+Include的寫法,而且只支援二級解析,一級版本號碼,二級分別表示應用模組。

  2. routers/router.go檔案中設定全域的應用資訊。注意,必須寫在檔案頂部。

  3. 注釋的格式(每個欄位的含義可以參照Auto Docs):

    // @Title login// @Description Logs user into the system// @Param   username        query   string  true        "The username for login"// @Param   password        query   string  true        "The password for login"// @Success 200 {string} login success// @Failure 403 user not exist// @router /login [get]func (u *UserController) Login() {    username := u.GetString("username")    password := u.GetString("password")    if models.Login(username, password) {        u.Data["json"] = "login success"    } else {        u.Data["json"] = "user not exist"    }    u.ServeJSON()}
  4. 在設定檔中開啟自動文檔配置:

    EnableDocs = true
  5. 啟動時添加自動文檔參數:

    bee run -gendoc=true

滿足以上配置,beego會自動解析控制器中的注釋,啟動swagger服務,並在/docs介面上提供已產生好的json字串。
訪問swagger服務並在swagger中訪問/docs介面,即可看到介面的文檔,同時也可以對介面進行測試。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.