文档章节

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

go-skyblue
 go-skyblue
发布于 2014/03/14 15:35
字数 533
阅读 5185
收藏 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

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

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

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

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

mickelfeng
2018/11/27
228
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
443
0

没有更多内容

加载失败,请刷新页面

加载更多

html2canvas 生成的图片变模糊解决方案

需求: 背景图片和二维码还有用户微信头像生成一张图片,可供用户下载。打开页面的时候就是一张图可以保存,html2canvas插件即可实现效果,效果是实现了,但是很郁闷,图片模糊了。。。。 为...

前端老手
9分钟前
2
0
语音翻译器在线翻译语音

对于英语不好的朋友来说,如果出国旅游,多多少少都会使用到翻译软件。通过在线翻译的方式,方便彼此的沟通交流。那么,有朋友就在问哪个英语翻译软件最准确?下面就来和大家一起分享下这个简...

401恶户
10分钟前
2
0
国内25家滤波器公司排名

国内做滤波器的企业都有哪些?哪些企业做滤波器是比较知名的?国内滤波器企业排名如何?以下是解优人才网小编给大家的分享,国内前25家做滤波器的企业详细信息。 1、武汉凡谷电子技术股份有限...

猎头悬赏平台
15分钟前
4
0
即时配送,不再只是巨头的战场

9月4日,第十届中国电子商务物流大会暨2019中国同城即时物流行业峰会于杭州召开。会上出现了蜂鸟即配、达达-京东到家、美团配送、点我达、闪送等一众即时配送行业中的知名企业的身影。 在艾媒...

喵二狸
15分钟前
3
0
Moto G 2014 LTE Root

[TOC] 下载moto专用mfastboot mfastboot-v2.zip 下载对应设备的twrp 我的是这个版本 Moto G 2014 LTE thea 刷入twrp # 1. 开启USE调试# 2. 允许OEM解锁# 3. 查看设备adb devices# 4. 进f...

yeahlife
19分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部