beego介绍

beego是一个Golang实现的开源Go应用开发框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful的框架,主要设计灵感来源于tornado、sinatra和flask这三个框架,但是结合了Go本身的一些特性(interface、struct 嵌入等)而设计的一个框架。

Beego Framework:

一个使用 Go 的思维来帮助您构建并开发 Go 应用程序的开源框架

beego简介

beego安装, bee命令

安装beego

  1. #go get github.com/astaxie/beego

安装bee工具,bee工具是一个为了协助快速开发beego项目而创建的项目,可以通过bee快速创建项目、实现热编译、开发测试以及开发完之后打包发布的一整套从创建、开发到部署的方案。

  1. #go get github.com/beego/bee

bee命令默认安装在$GOPATH/bin下,把这个路径添加到PATH中。

实践中主要用到bee的三个子命令:api,run,pack。

  1. api命令用来创建api应用,生成默认beego api应用框架。

    1. # bee api snmpcheck
    2. # tree snmpcheck/
    3. snmpcheck/
    4. ├── conf
    5.    └── app.conf
    6. ├── controllers
    7.    ├── object.go
    8.    └── user.go
    9. ├── docs
    10.    └── doc.go
    11. ├── main.go
    12. ├── models
    13.    ├── object.go
    14.    └── user.go
    15. ├── routers
    16.    └── router.go
    17. └── tests
    18. └── default_test.go

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

  2. run命令用来编译运行beego工程,并通过fsnotify监控源码的改动,实现热编译,开发过程中就可以实时的看到项目修改之后的效果。

    1. # bee run
    2. bee :1.4.1
    3. beego :1.6.1
    4. Go :go version go1.5.1 linux/amd64
    5. [INFO] Uses 'snmpcheck' as 'appname'
    6. [INFO] Initializing watcher...
    7. [TRAC] Directory(/home/lab/src/snmpcheck/controllers)
    8. [TRAC] Directory(/home/lab/src/snmpcheck)
    9. [TRAC] Directory(/home/lab/src/snmpcheck/models)
    10. [TRAC] Directory(/home/lab/src/snmpcheck/routers)
    11. [TRAC] Directory(/home/lab/src/snmpcheck/tests)
    12. [INFO] Start building...
    13. [SUCC] Build was successful
    14. [INFO] Restarting snmpcheck ...
    15. [INFO] ./snmpcheck is running...
    16. [parser.go:61][I] /home/lab/src/snmpcheck/controllers no changed
    17. [parser.go:61][I] /home/lab/src/snmpcheck/controllers no changed
    18. [asm_amd64.s:1696][I] http server Running on :7070
  3. pack命令用来发布应用的时候打包。

    1. # bee pack
    2. app path: /home/lab/src/snmpcheck
    3. build snmpcheck
    4. GOOS linux GOARCH amd64
    5. build success
    6. exclude relpath prefix: .
    7. exclude relpath suffix: .go:.DS_Store:.tmp
    8. file write to `/home/lab/src/snmpcheck/snmpcheck.tar.gz`

打包完的tar包中有应用的可执行文件和配置文件,部署时直接上传这个tar包即可。

  1. # tar -tf snmpcheck.tar.gz
  2. snmpcheck
  3. conf/app.conf

restful路由

beego的路由设置比较灵活,包括固定路由,正则匹配路由,以及通过go反射机制实现的自动路由(可能会导致性能损耗,不推荐使用这种路由设置方式)和注解路由。

实践中使用比较方便的注解路由方式。注解路由的使用:

  1. 首先在router中用namespace方式注册控制器。这里在/v1/user下,导入UserController控制器。

    1. ns := beego.NewNamespace("/v1",
    2. ...
    3. beego.NSNamespace("/user",
    4. beego.NSInclude(
    5. &controllers.UserController{},
    6. ),
    7. ),
    8. ...
    9. )
    10. beego.AddNamespace(ns)
  2. 在控制器中对应方法上用注解方式注册路由。

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

注解路由使用关键字@router

这里"@router /logout [get]"注册了"Get /v1/user/logout -> UserController.Logout()"这样的路由。

如果beego运行在dev模式(可以在conf中配置),routers目录下会生成路由经过解析后的结果commentsRouter.go,调试时可以作为参考。

进程内监控

beego提供了应用信息的监控和展示,可以查看实时信息比如qps,健康状况,程序性能相关(goroutine,gc,cpu等),可以查看静态信息比如路由配置,conf配置信息,过滤器信息,还可以查看和触发任务。

进程监控默认是关闭的,可以通过简单的配置中打开,很方便:

  1. EnableAdmin = true
  2. AdminHttpAddr = 0.0.0.0 #默认监听地址是localhost
  3. AdminHttpPort = 8088

这样,应用启动后,会在8088端口提供监控展示服务。

自动化文档

beego通过swagger和内部的注释解析能够实现自动文档的效果,使用方法:

  1. routers/router.go中路由只能使用namespace+Include的写法,而且只支持二级解析,一级版本号,二级分别表示应用模块。

  2. routers/router.go文件中设置全局的应用信息。注意,必须写在文件顶部。

  3. 注释的格式(每个字段的含义可以参照Auto Docs):

    1. // @Title login
    2. // @Description Logs user into the system
    3. // @Param username query string true "The username for login"
    4. // @Param password query string true "The password for login"
    5. // @Success 200 {string} login success
    6. // @Failure 403 user not exist
    7. // @router /login [get]
    8. func (u *UserController) Login() {
    9. username := u.GetString("username")
    10. password := u.GetString("password")
    11. if models.Login(username, password) {
    12. u.Data["json"] = "login success"
    13. } else {
    14. u.Data["json"] = "user not exist"
    15. }
    16. u.ServeJSON()
    17. }
  4. 在配置文件中打开自动文档配置:

    1. EnableDocs = true
  5. 启动时添加自动文档参数:

    1. bee run -gendoc=true

满足以上配置,beego会自动解析控制器中的注释,启动swagger服务,并在/docs接口上提供已生成好的json字串。

访问swagger服务并在swagger中访问/docs接口,即可看到接口的文档,同时也可以对接口进行测试。

beego搭建api服务的更多相关文章

  1. 如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (一)

    介绍   Go 语言最近十分火热,但对于新手来说,想立马上手全新的语法和各种各样的框架还是有点难度的.即使是基础学习也很有挺有挑战性.   在这篇文章中,我想用最少的代码写出一个可用的 API 服务. ...

  2. mock---前端搭建模拟服务

    在做前端开发接口的时候,往往接口都是从后端来的,这让前端很苦恼,但是有了 MockServer ,前端也可以搭建API服务了. server-mock是什么? 是一款nodejs的应用,用于搭建web ...

  3. 使用 Beego 搭建 Restful API 项目

    1 环境准备 首先你需要在你的环境安装以下软件: go:编程语言运行环境 git:版本控制工具 beego:go 语言流行的开发框架 bee:beego 配套的快速搭建工具 你喜欢的数据库:这里以 M ...

  4. 使用CodeIgniter框架搭建RESTful API服务

    使用CodeIgniter框架搭建RESTful API服务 发表于 2014-07-12   |   分类于 翻译笔记   |   6条评论 在2011年8月的时候,我写了一篇博客<使用Cod ...

  5. ServiceStack.Hello——跨平台.net REST api服务搭建

    ServiceStack.Hello--跨平台.net REST api服务搭建 自己创建: https://github.com/ServiceStack/ServiceStack/wiki/Cre ...

  6. spring cloud+dotnet core搭建微服务架构:Api网关(三)

    前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...

  7. spring cloud+dotnet core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

  8. 使用nodejs搭建api的mock服务

    1. 介绍 公司的业务开发都是静态页面,开发前期总是避免不了获取api的问题.在vue中有一些mockjs的方案,方案都是注入性质的,和最终部署总是有差别,而且业务大部分还在zepto下,很难找到合适 ...

  9. spring cloud+.net core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

随机推荐

  1. FROM-4-TO-6!!!!!!!!! - OO第二单元总结

    电梯的这三次作业是对并发编程的一次管窥,感觉收获还是蛮多的.在设计上有好的地方也有不足,这里简单回顾总结一下 设计总述 电梯这个问题由于比较贴近真实生活,所以需求还是很好理解的.总的来说,我的数据处理 ...

  2. Ansible触发器-tag标签-忽略错误

    触发器 playbook handlers handler`用来执行某些条件下的任务,比如当配置文件发生变化的时候,通过notify触发handler去重启服务. 在saltstack中也有类似的触发 ...

  3. Sqli-labs-master通关解析(持续更新中。。。)

    大多情况下:SQL注入其实就是构造正确的mysql命令,让网页回显本不应该让我们看到的数据(如用户的账号和密码). 第一关-联合查询注入 查库 // 查看当前页面在的数据库 ?id=-1' union ...

  4. k8s创建资源的两种方式及DaemonSet应用(5)

    一.创建方式分类 Kubernetes 支持两种方式创建资源: (1)用 kubectl 命令直接创建,比如: kubectl run httpd-app --image=reg.yunwei.com ...

  5. 搜狗拼音输入法v9.6a (9.6.0.3568) 去广告精简优化版本

    https://yxnet.net/283.html 搜狗拼音输入法v9.6a (9.6.0.3568) 去广告精简优化版本 软件大小:29.2 MB 软件语言:简体中文 软件版本:去广告版 软件授权 ...

  6. 分布式存储ceph---ceph常用命令(3)

    1.查看ceph集群配置信息 ceph daemon /var/run/ceph/ceph-mon.$(hostname -s).asok config show 2.在部署节点修改了ceph.con ...

  7. UCOS 多任务系统中需要注意的地方 一个任务至少要有一些执行内容

    图片说明: 在一个TASK的最外层FOR();中  如果有调用BREAK会怎样??

  8. CGI开发-(转自 jemofh159)

    随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器, ...

  9. 如何在idea中将项目生成API文档(超详细)(Day_32)

    1.打开要生成API文档的项目,点击菜单栏中的Tools工具,选择Generate JavaDoc 2.打开如下所示的Specify Generate JavaDoc Scope 界面 3.解释下Ot ...

  10. Question&&Answer

    1.使用Navicat连接Ubuntu上面的MySql数据库失败 解决办法:Navicat版本的问题,尝试换用更高版本的Navicat解决了问题(当时使用了Navicat Premium_11.2.7 ...