beego搭建api服務


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 run
     bee   :1.4.1
     beego :1.6.1
     Go    :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 pack
     app path: /home/lab/src/snmpcheck
     build snmpcheck
     GOOS linux GOARCH amd64
     build success
     exclude relpath prefix: .
     exclude relpath suffix: .go:.DS_Store:.tmp
     file write to `/home/lab/src/snmpcheck/snmpcheck.tar.gz`
    

打包完的tar包中有應用的可執行文件和配置文件,部署時直接上傳這個tar包即可。

	# tar -tf snmpcheck.tar.gz 
	snmpcheck
	conf/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 = true
AdminHttpAddr = 0.0.0.0 #默認監聽地址是localhost
AdminHttpPort = 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接口,即可看到接口的文檔,同時也可以對接口進行測試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM