Beego应用开发01
来源:互联网 发布:linux搭建局域网 编辑:程序博客网 时间:2024/05/29 06:38
环境搭建
所有内容建立在已经搭建好GoLang环境的继承上。
安装Beego和Bee
Beego是GoLang的一个Web框架,由国人开发,文档和资料比较全面,各方面性能也很优秀。我们这里使用它作为学习的目标。Bee是Beego对应的项目管理工具,通过它我们可以很方便地管理我们的Beego项目。
在控制台里输入go get -u github.com/astaxie/beego
go自身的包管理工具会将最新的beego框架下载到 GOPATH/src
目录下。然后输入go get -u github.com/beego/bee
下载Bee工具,默认安装在GOBIN目录下。
创建Beego项目
使用Bee工具,我们可以非常方便创建Beego Web/API项目,我们以API项目为例:(Windows平台)
cd /d %GOPATH%/srcbee api myApicd /d myApibee run myApi
最后的bee run myApi
是bee工具提供的热编译功能,当检测到代码变化时,自动重新变异项目,非常方便。
bee run -gendoc=true -downdoc=true
myApi 应用跑起来,-gendoc=true
表示每次自动化的 build 文档,-downdoc=true
就会自动的下载 swagger 文档查看器。在地址栏输入http://127.0.0.1:8080/swagger
就可以看到效果了。
项目概览
myApi目录:│ main.go│ myApi.exe|├─conf│ app.conf│├─controllers│ object.go│ user.go│├─models│ object.go│ user.go│├─routers│ commentsRouter_controllers.go│ router.go│├─swagger│ favicon-16x16.png│ favicon-32x32.png│ index.html│ oauth2-redirect.html│ swagger-ui-bundle.js│ swagger-ui-bundle.js.map│ swagger-ui-standalone-preset.js│ swagger-ui-standalone-preset.js.map│ swagger-ui.css│ swagger-ui.css.map│ swagger-ui.js│ swagger-ui.js.map│ swagger.json│ swagger.yml│└─tests default_test.go
整个项目的入口为main.go
,配置文件为conf/app.conf
。
每一个函数上面的注释,这里列出来支持的各种注释:
@Title
这个 API 所表达的含义,是一个文本,空格之后的内容全部解析为 title
@Description
这个 API 详细的描述,是一个文本,空格之后的内容全部解析为 Description
@Param
参数,表示需要传递到服务器端的参数,有五列参数,使用空格或者 tab 分割,五个分别表示的含义如下
- 参数名
- 参数类型,可以有的值是 formData、query、path、body、header,formData 表示是 post 请求的数据,query 表示带在 url 之后的参数,path 表示请求路径上得参数,例如上面例子里面的 key,body 表示是一个 raw 数据请求,header 表示带在 header 信息中得参数。
- 参数类型
- 是否必须
- 注释
@Success
成功返回给客户端的信息,三个参数,第一个是 status code。第二个参数是返回的类型,必须使用 {} 包含,第三个是返回的对象或者字符串信息,如果是 {object} 类型,那么 bee 工具在生成 docs 的时候会扫描对应的对象,这里填写的是想对你项目的目录名和对象,例如
models.ZDTProduct.ProductList
就表示/models/ZDTProduct
目录下的ProductList
对象。三个参数必须通过空格分隔
@Failure
失败返回的信息,包含两个参数,使用空格分隔,第一个表示 status code,第二个表示错误信息
@router
路由信息,包含两个参数,使用空格分隔,第一个是请求的路由地址,支持正则和自定义路由,和之前的路由规则一样,第二个参数是支持的请求方法,放在
[]
之中,如果有多个方法,那么使用,
分隔。
主要代码解析
- 项目入口(main.go)
package mainimport ( _ "myApi/routers" // 这里导入了router模块,调用init "github.com/astaxie/beego")func main() { if beego.BConfig.RunMode == "dev" { beego.BConfig.WebConfig.DirectoryIndex = true beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger" } beego.Run()}
- Router的初始化
// @APIVersion 1.0.0// @Title beego Test API// @Description beego has a very cool tools to autogenerate documents for your API// @Contact astaxie@gmail.com// @TermsOfServiceUrl http://beego.me/// @License Apache 2.0// @LicenseUrl http://www.apache.org/licenses/LICENSE-2.0.htmlpackage routersimport ( "myApi/controllers" // 调用controllers模块 "github.com/astaxie/beego")func init() { // 这里使用命名空间,将各个不同功能的模块区分开来 ns := beego.NewNamespace("/v1", beego.NSNamespace("/object", beego.NSInclude( &controllers.ObjectController{}, ), ), beego.NSNamespace("/user", beego.NSInclude( &controllers.UserController{}, ), ), ) beego.AddNamespace(ns) // 根据命名空间生成路由}
- Controllers模块
controllers模块中,有object和user两个models对应的控制接口,支持Get/Post/Put/Delete
方法,并且为每个接口编写了文档注释,例子如下:
import ( "myApi/models" "encoding/json" "github.com/astaxie/beego")// Operations about objecttype ObjectController struct { beego.Controller}// @Title Get// @Description find object by objectid// @Param objectId path string true "the objectid you want to get"// @Success 200 {object} models.Object// @Failure 403 :objectId is empty// @router /:objectId [get]func (o *ObjectController) Get() { objectId := o.Ctx.Input.Param(":objectId") if objectId != "" { ob, err := models.GetOne(objectId) if err != nil { o.Data["json"] = err.Error() } else { o.Data["json"] = ob } } o.ServeJSON()}
- models模块:
models模块中定义了与数据库或者模型对应的结构体,用于ORM操作。Demo中的init函数虚拟了一个类似数据库的操作和对象,直接在内存中进行存储。虽然与实际使用不一定一致,但是原理是一样的。
package modelsimport ( "errors" "strconv" "time")var ( Objects map[string]*Object)type Object struct { ObjectId string Score int64 PlayerName string}func init() { Objects = make(map[string]*Object) Objects["hjkhsbnmn123"] = &Object{"hjkhsbnmn123", 100, "astaxie"} Objects["mjjkxsxsaa23"] = &Object{"mjjkxsxsaa23", 101, "someone"}}func AddOne(object Object) (ObjectId string) { object.ObjectId = "astaxie" + strconv.FormatInt(time.Now().UnixNano(), 10) Objects[object.ObjectId] = &object return object.ObjectId}
配置文件
beego中很多功能都可以在配置文件中开启,用户也可以自己在配置文件中编写自己的信息。并且由于beego借鉴了很多其他配置方案的优点,支持节点、环境变量、配置切换….功能,非常强大!
强烈建议参看官方文档: URL
其他目录介绍
- tests 为用户编写了一个简单的测试用例
- swagger 通过命令
bee run -gendoc=true -downdoc=true
会生成 swagger.json和swagger.yml文件,里面包含了所有API的结构化文档。同时,downdoc参数指定了在线下载swagger模版,解压在这个文件夹下,当访问http://127.0.0.1/swagger
时,会使用这个模版渲染swagger.json文件,形成好看的api文档。
- Beego应用开发01
- Beego应用开发02
- beego开发环境
- beego 开发环境
- beego开发文档
- beego框架——快速开发go应用的http框架
- beego框架——快速开发go应用的http框架
- beego框架——快速开发go应用的http框架
- beego
- beego
- beego
- beego
- 【Go】Beego Orm中反射的应用
- beego网站开发 定时执行任务
- beego API开发以及自动化文档
- beego API开发以及自动化文档
- 利用beego开发网站(一)
- 利用beego开发网站(二)
- LaTeX入门
- Windows读取文件的版本信息
- kali linux攻击机及windowsXp/Metasploit_linux靶机安装及在此基础上的蜜罐系统搭建(上)
- 学习Hadoop遇到的问题
- 在tp中实现单个用户禁止重复登录
- Beego应用开发01
- Muduo网络库源码分析(一) EventLoop事件循环(Poller和Channel)
- 2017 上半年最酷,最受欢迎的30 个 Android 库
- iOS中集成ijkplayer视频直播框架
- 用Runtime.getRuntime().exec()需要注意的地方
- uuid 生成方法
- 微服务框架选择:Spring Cloud还是Dubbo?
- 剑指offer-操作给定的二叉树,将其变换为源二叉树的镜像
- CentOS-6.5安装与配置Tomcat-7