文档章节

使用xorm和beego快速生成REST-API应用(只写了一半的文章)

go-skyblue
 go-skyblue
发布于 2014/03/14 15:35
字数 533
阅读 5250
收藏 4

框架选择

选择beego是因为它文档比较全, 选择xorm是因为我用了很久,而且它真的很好用.

beego的API设计

web应用中,用的最多的还是 json的请求和返回.

参考jas的风格, API的返回值,规定如下, 如果请求成功. 返回

{"error": null, "data": ...}

失败返回

{"error": "why failed..", "data": ...}

先假设有个struct叫User, 已经初始化 var x *xorm.Engine

type User struct {
    ID      int64  `json:"id" xorm:"id pk autoincr"`
    Name    string `json:"name"`
}

beego中的路由规则

beego.Router("/api/template/save", &controllers.UserController{}, "post:save")
beego.Router("/api/template/all", &controllers.UserController{}, "get:All")
beego.Router("/api/template/:id(\d+)", &controllers.UserController{}) // GET + PUT  + DELETE
  1. 使用命令bee生成的基础的beego框架
  2. 新建的APIController
  3. 完善models中的逻辑
  4. 完善controllers中的REST接口

相关的代码

生成beego的框架 - 先pass

conf/app.conf中增加一行 autorender=false

APIController

APIController这个东西是从beego.Controller继承过来的东东.

type APIController struct {
    beego.Controller
    err  error
    data interface{}
}    
// 函数结束时,组装成json结果返回
func (this *APIController) Finish() {
    r := struct {
        Error interface{} `json:"error"`
        Data  interface{} `json:"data"`
    }{}
    if this.err != nil {
        r.Error = this.err.Error()
    }
    r.Data = this.data
    this.Data["json"] = r
    this.ServeJson()
}
// 如果请求的参数不存在,就直接 error返回
func (this *APIController) MustString(key string) string {
    v := this.GetString(key)
    if v == "" {
        this.Data["json"] = map[string]string{
            "error": fmt.Sprintf("require filed: %s", key),
            "data":  "orz!!",
        }
        this.ServeJson()
        this.StopRun()
    }
    return v
}
// 其他的函数跟它累似,就不写了

xorm中的CRUD操作

Create + Update = Save

// for /api/user/create
func (v *User) Create() error {
    _, err = x.Insert(v)
    return err
}

// for /api/user/update
func UpdateUser(id int64, v *User) error {
    affec, err := x.Id(id).Update(v)
    if err == nil && affec == 0 {
        err = errors.New("update user error")
    }
    return err
}
// for /api/user/save
func (v *User) Save() error {
    if v.ID == 0 {
        return v.Create()
    }
    return UpdateUser(id, v)
}
// for /api/user/all
func AllUser() (vs[]User, err error{
    err = x.Find(&vs)
    return
}
// for /api/user/delete
func DelUser(id int64) error {
    affec, err := x.Id(id).Delete(new(User))
    if err == nil && affec == 0 {
        err = errors.New("already deleted")
    }
    this.err = err
}

beego中的Controller操作

type UserController struct {
    APIController
}
// Save
func (this *UserController) Save() {
    v := new(models.User)
    v.ID = this.MustInt64WithDefault("id", 0)
    v.Name = this.MustString("name")
    this.err = v.Save()
}
// Put
func (this *UserController) Put(){
    v := new(models.User)
    v.ID = this.MustInt64(":id")
    v.Name = this.MustString("name")
    this.err = v.Save()
}
// All
func (this *UserController) All(){
    this.data, this.err = models.AllUser()
}
// Delete
func (this *UserController) Delete(){
    id := this.MustInt64(":id")
    this.err = models.DeleteUser(id)
}

© 著作权归作者所有

go-skyblue

go-skyblue

粉丝 89
博文 50
码字总数 31921
作品 5
杭州
程序员
私信 提问
使用xorm工具,根据数据库自动生成 go 代码

使用xorm工具,根据数据库自动生成 go 代码 引入 使用 golang 操作数据库的同学都会遇到一个问题 —— 根据数据表结构创建对应的 struct 模型。因为 golang 的使用首字母控制可见范围,我们经...

万建宁
2018/12/04
440
0
xorm操作PostgreSQL数据库(增删改查实例)

一、xorm介绍 xorm是一个简单而强大的Go语言ORM库.通过它可以使数据库操作非常简便。xorm的目标并不是让你完全不去学习SQL,我们认为SQL并不会为ORM所替代,但是ORM将可以解决绝大部分的简单...

mickelfeng
2018/11/27
241
0
xorm速记卡 Quick Reference

xorm is a very famous golang lib, for operating relation database. Install Documentation godoc-xorm gowalker-xorm Quickstart Get started Import packages Define models Create dat......

go-skyblue
2014/03/10
2.6K
0
xorm v0.1.7 发布,Go语言ORM框架

xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 本次版本发布有如下更新: 1.新增IConnectPool接口以及NoneConnectPool, SysConnectPool, SimpleConnectPool三种实现...

lunny
2013/07/03
1K
23
记录下学习Go语言时用到的一些项目

IDE:liteide Web Framework:beego,Martini,macaron Orm:gorm,xorm 全文检索:golucene 脚手架: goconfig,go-sql-driver 一些应用项目: cms:sudochina spider:go_spider blog:go_......

从前
2015/03/04
447
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊nacos config的deleteConfig

序 本文主要研究一下nacos config的deleteConfig ConfigController nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java @Controller@Re......

go4it
昨天
3
0
面试:原来Redis的五种数据类型底层结构是这样的

关注我,可以获取最新知识、经典面试题以及微服务技术分享   在Redis中会涉及很多数据结构,比如SDS,双向链表、字典、压缩列表、整数集合等等。Redis会基于这些数据结构自定义一个对象系统...

ccww_
昨天
4
0
java发送html模板的高逼格邮件

最近做了一个监测k8s服务pod水平伸缩发送邮件的功能(当pod的cpu/内存达到指定阈值后会水平扩展出多个pod、或者指定时间内pod数应扩展到指定数量),一开始写了个格式很low的邮件,像下面这样...

码农实战
昨天
10
0
php-fpm配置文件详解/MariaDB密码重置、慢查询日志

来源:https://blog.csdn.net/Powerful_Fy php-fpm主配置文件路径:/usr/local/php-fpm/etc/php-fpm.conf #位于安装php安装目录下的etc/目录中,该文件中最后一行将配置文件指向:include=/...

asnfuy
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部