在Ubuntu上快速搭建基于Beego的RESTful API
最近在研究Go,打算基于Go做点Web API,于是经过初步调研,打算用Beego这个框架,然后再结合其中提供的ORM以及Swagger的集成,可以快速搭建一个RESTful API的网站。
下面是具体做法:
1. 在Ubuntu中安装Go 1.8
默认Ubuntu apt-get提供的是Go 1.6,而我们要用最新的Go 1.8需要执行以下操作:
1.1 添加apt-get源并刷新
$ sudo add-apt-repository ppa:gophers/archive
$ sudo apt-get update
1.2 安装Go 1.8
$ sudo apt-get install golang-1.8
1.3 设置环境变量
等安装完毕后,Go会被安装到/usr/lib/go-1.8目录。我们要执行go命令和建立自己项目的话,需要增加一些环境变量。
我们以后代码要放在当前用户下的Go目录下,需要先创建2个目录:
$ mkdir -p ~/go/bin
$ mkdir -p ~/go/src
然后设置当前用户的环境变量:
vi ~/.profile
在结尾增加以下内容:
export GOROOT=/usr/lib/go-1.8
export PATH="$PATH:$GOROOT/bin"
export GOPATH=$HOME/go
export PATH="$PATH:$GOPATH/bin"
保存后,重新刷新环境变量
source ~/.profile
接下来我们验证一下我们的Go版本,输入
go version
我当前返回的是go version go1.8.1 linux/amd64说明我们的Go 1.8已经安装成功
2. 下载Beego、Bee工具和MySQL驱动
Beego是一个非常适合Go初学者的Web框架,提供了很多的功能,有些人说他臃肿,不过对于我这个Go初学者来说,不在乎是否臃肿,而在乎是否快速解决问题,是否简单。下面我们来安装Beego,这个很简单,只需要执行以下命令:
$ go get -u github.com/astaxie/beego
$ go get -u github.com/beego/bee
其中beego是框架的源代码,而bee是一个快速创建运行Beego项目的工具。
我们的目标是要实现ORMapping,那么连接数据库是必不可少的,需要另外下载Go版的MySQL驱动:
$ go get github.com/go-sql-driver/mysql
这些通过go get下载下来的文件都在~/go/src中,而bee工具是在~/go/bin中。
3. 创建api项目并运行
直接使用bee工具创建一个简单的RESTful API项目是个不二的选择,假设我们的项目名字叫testApi,那么只需要执行:
bee api testApi
那么程序就会创建对应的文件在目录~/go/src/testApi
接下来我们需要运行这个项目。首先切换到到项目文件夹,然后运行bee run命令:
cd ~/go/src/testApi bee run -gendoc=true -downdoc=true
这个时候我们可以看到系统已经运行在8080端口,我们切换到浏览器,访问这个网站的Swagger地址:
http://192.168.100.129:8080/swagger/
就可以看到我们熟悉的Swagger界面了:

4. 修改代码,实现ORMapping
如果我们来到testApi项目文件夹,会看到类似MVC的结构,不过由于Web API不需要真正的View, 所有view文件夹被Swagger替换。下面我们要新建一个Student对象,并实现对Student增删改查的Web API。
4.1 新建Student model和对应的表
我们可以先在MySQL中创建Student表:
CREATE TABLE `student` (
`Id` int(11) NOT NULL,
`Name` varchar(10),
`Birthdate` date ,
`Gender` tinyint(1) ,
`Score` int(11),
PRIMARY KEY (`Id`)
)
然后在model文件夹下新建Student.go文件,增加Student对象:
type Student struct {
Id int
Name string
Birthdate string
Gender bool
Score int
}
4.2初始化ORM模块
我们要通过ORM来操作对象和数据库,但是ORM需要初始化才能使用,我们需要在main.go文件中增加以下内容:
import (
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
func init() {
orm.RegisterDriver("mysql", orm.DRMySQL)
orm.RegisterDataBase("default", "mysql", "zengyi:123@tcp(127.0.0.1:3306)/testdb?charset=utf8")
}
这里需要注意的是数据库连接字符串和普通的写法不一样,要写成如下格式:
用户名:密码@tcp(MySQL服务器地址:端口)/数据库名字?charset=utf8
4.3 提供数据库查询Student的方法
接下来就是数据库访问方法了。我们可以仿照user.go一样,把方法都写在Student.go文件里面。这是完整的Student.go文件:
package models import (
"github.com/astaxie/beego/orm"
"fmt"
"time"
) type Student struct {
Id int
Name string
Birthdate string
Gender bool
Score int
} func GetAllStudents() []*Student {
o := orm.NewOrm()
o.Using("default")
var students []*Student
q:= o.QueryTable("student")
q.All(&students)
return students }
func GetStudentById(id int) Student{
u:=Student{Id:id}
o := orm.NewOrm()
o.Using("default")
err := o.Read(&u)
if err == orm.ErrNoRows {
fmt.Println("查询不到")
} else if err == orm.ErrMissPK {
fmt.Println("找不到主键")
}
return u
}
func AddStudent(student *Student) int{
o := orm.NewOrm()
o.Using("default")
o.Insert(student)
return student.Id
}
func UpdateStudent(student *Student) {
o := orm.NewOrm()
o.Using("default")
o.Update(student)
} func DeleteStudent(id int){
o := orm.NewOrm()
o.Using("default")
o.Delete(&Student{Id:id})
} func init() {
// 需要在init中注册定义的model
orm.RegisterModel(new(Student))
}
4.4 创建StudentController对外提供Student的增加、删除、修改、查询一个、查询所有的方法
这里我们也可以仿照usercontroller,直接改写成我们需要的StudentController.go。这是内容:
package controllers import "github.com/astaxie/beego"
import (
"testApi/models"
"encoding/json"
) type StudentController struct {
beego.Controller
}
// @Title 获得所有学生
// @Description 返回所有的学生数据
// @Success 200 {object} models.Student
// @router / [get]
func (u *StudentController) GetAll() {
ss := models.GetAllStudents()
u.Data["json"] = ss
u.ServeJSON()
}
// @Title 获得一个学生
// @Description 返回某学生数据
// @Param id path int true "The key for staticblock"
// @Success 200 {object} models.Student
// @router /:id [get]
func (u *StudentController) GetById() {
id ,_:= u.GetInt(":id")
s := models.GetStudentById(id)
u.Data["json"] = s
u.ServeJSON()
}
// @Title 创建用户
// @Description 创建用户的描述
// @Param body body models.Student true "body for user content"
// @Success 200 {int} models.Student.Id
// @Failure 403 body is empty
// @router / [post]
func (u *StudentController) Post() {
var s models.Student
json.Unmarshal(u.Ctx.Input.RequestBody, &s)
uid := models.AddStudent(&s)
u.Data["json"] = uid
u.ServeJSON()
}
// @Title 修改用户
// @Description 修改用户的内容
// @Param body body models.Student true "body for user content"
// @Success 200 {int} models.Student
// @Failure 403 body is empty
// @router / [put]
func (u *StudentController) Update() {
var s models.Student
json.Unmarshal(u.Ctx.Input.RequestBody, &s)
models.UpdateStudent(&s)
u.Data["json"] = s
u.ServeJSON()
}
// @Title 删除一个学生
// @Description 删除某学生数据
// @Param id path int true "The key for staticblock"
// @Success 200 {object} models.Student
// @router /:id [delete]
func (u *StudentController) Delete() {
id ,_:= u.GetInt(":id")
models.DeleteStudent(id)
u.Data["json"] = true
u.ServeJSON()
}
这里需要注意的是,函数上面的注释是很重要的,有一定的格式要求,Swagger就是根据这些注释来展示的,所以必须写正确。
4.5 将StudentController注册进路由
现在大部分工作已经完成,我们只需要把新的StudentController注册进路由即可,打开router.go,增加以下内容:
beego.NSNamespace("/student",
beego.NSInclude(
&controllers.StudentController{},
),
),
当然对于系统默认的user和object,如果我们不需要,可以注释掉。
4.6 运行并通过Swagger测试
我们的编码已经完成。接下来使用bee命令来运行我们的项目:
bee run -gendoc=true -downdoc=true
我们就可以看到我们新的student Controller了。并且可以通过调用API来完成对student表的CRUD操作。

在Ubuntu上快速搭建基于Beego的RESTful API的更多相关文章
- .net core系列之《sdk和runtime区别及使用CLI在Ubuntu上快速搭建Console,WebApi,MVC三大应用模型》
一.需要安装的软件 1.虚拟机安装Ubuntu系统(本人用的是vmware-14.1.12和buntu-18.04) 2.Xshell或 Putty(连接ssh服务) 3.FileZilla(ftp上 ...
- 一文教你如何在ubuntu上快速搭建STM32 CubeIDE环境(图文超详细+文末有附件)
在快速ubuntu上安装cubeide你值得拥有:适合对linux系统还不是很熟悉的同学: 文章目录 1 下载 cubeide 2 找到软件 3 安装 4 附件 5 总结 1 下载 cubeide 登 ...
- 第四篇:用IntelliJ IDEA 搭建基于jersey的RESTful api
编译器:Intellij IDEA 系统环境: MAC OS 相关技术:Maven.tomcat 7.jdk8 1.创建项目 首先创建一个web Application项目(这里我们打算用maven引 ...
- WAMP Server助你在Windows上快速搭建PHP集成环境
WAMP Server助你在Windows上快速搭建PHP集成环境 原文地址 我想只要爬过几天网的同学都会知道PHP吧,异次元的新版本就是基于PHP的WordPress程序制造出来的,还有国内绝大部分 ...
- 在GitLab pages上快速搭建Jekyll博客
前一段时间将我的Jekyll静态博客从github pages镜像部署到了 zeit.co(现vercel)上了一份,最近偶然发现gitlab pages也不错,百度也会正常抓取,于是动手倒腾,将gi ...
- python 全栈开发,Day95(RESTful API介绍,基于Django实现RESTful API,DRF 序列化)
昨日内容回顾 1. rest framework serializer(序列化)的简单使用 QuerySet([ obj, obj, obj]) --> JSON格式数据 0. 安装和导入: p ...
- 云上快速搭建Serverless AI实验室
Serverless Kubernetes和ACK虚拟节点都已基于ECI提供GPU容器实例功能,让用户在云上低成本快速搭建serverless AI实验室,用户无需维护服务器和GPU基础运行环境,极大 ...
- 烂泥:学习ubuntu之快速搭建LNMP环境
本文由秀依林枫提供友情赞助,首发于烂泥行天下 现在公司使用的都是ubuntu系统,这几天由于个别项目需要,需要搭建一个LNMP环境.为了快速搭建这个环境,我使用是apt-get方式进行安装.具体的操作 ...
- 如何快速搭建基于python+appium的自动化测试环境
首先申明本文是基本于Python与Android来快速搭建Appium自动化测试环境: 主要分为以下几个步骤: 前提条件: 1)安装与配置python环境,打开 Python官网,找到“Downloa ...
随机推荐
- loj#2049. 「HNOI2016」网络(set 树剖 暴力)
题意 题目链接 Sol 下面的代码是\(O(nlog^3n)\)的暴力. 因为从一个点向上只会跳\(logn\)次,所以可以暴力的把未经过的处理出来然后每个点开个multiset维护最大值 #incl ...
- 开发Spring过程中几个常见异常(三):java.lang.ClassCastException: com.sun.proxy.$Proxy4 cannot be cast to com.edu.aop.ArithmeticCalculatorImpl at com.edu.aop.Main.main(Main.java:11)
这个异常是在开发Spring案例时遇到的. 贴一下完整异常信息: Exception in thread "main" java.lang.ClassCastException: ...
- java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;
<java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...
- matlab练习程序(波纹扭曲)
其实就是用sin或cos对x,y坐标进行变换,处理的时候依然是反向变换. 类似的,用不同的函数能得到不同的扭曲效果,比如log,1/x,exp等等. 效果如下: 代码如下(还给出了如何生成gif图片的 ...
- SQL 数据插入、删除 大数据
--测试表 CREATE TABLE [dbo].[Employee] ( [EmployeeNo] INT PRIMARY KEY, [EmployeeName] [nvarchar](50) NU ...
- java笔记----JVM内存
运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器 虚拟机栈区 :也就是我们常说的栈区,线程私有,存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配. 堆区 ...
- MongoDB数据创建与使用
MongoDB数据创建与使用 创建数据库 代码功能:读取本地文本文件,并保存到数据库中 import pymongo #连接mongo数据库 client = pymongo.MongoClient( ...
- 如何使用Web3在浏览器中与智能合约进行交互
2018-4-20 技术文章 Web3.js是以太坊官方的Javascript API,可以帮助智能合约开发者使用HTTP或者IPC与本地的或者远程的以太坊节点交互.实际上就是一个库的集合,主要包括下 ...
- 【audio】耳机插拔 线控按键识别流程【转】
耳机插拔/线控按键识别流程 耳机插拔/线控按键识别流程 1.文档概述 本文以msm8909平台,android N为例,介绍了通用情况下,耳机插拔的流程步骤,以及对耳机类型的识别逻辑.以方便在项目工作 ...
- linux (fedora 28) 制作启动U盘,启动盘
最近需要安装一款Linux, 由于使用的计算机系统为 fedora 28, 所以只能在linux 制作U盘 使用 df 或者 fdisk -l 查看 U盘文件: Disk /dev/sdb: byte ...