beego是一个使用 Golang 来设计的快速构建并开发 Go 应用程序的开源http框架,可以快速开发API、Web、后端服务等各种应用,功能支持RESTFul,MVC模型;含有智能路由,内置强大模块,采用了 Go 原生的 http 包来处理请求;goroutine 的并发效率足以应付大流量的 Web 应用和 API 应用等等,简单易用,功能强大。
本文主要介绍beego框架获取http请求的一些介绍及注意事项。
获取参数
经常需要获取用户传递的数据,包括 Get、POST 等方式的请求,beego 里面会自动解析这些数据,你可以通过如下方式获取数据:
- GetString(key string) string
- GetStrings(key string) []string
- GetInt(key string) (int64, error)
- GetBool(key string) (bool, error)
- GetFloat(key string) (float64, error)
使用用户信息验证例子分别采用Get、Post方法举例如下:
在models中定义返回结构,其中code 含义 1 成功 0 失败
type GeneralResp struct {
Code int `json:"code"`
Data interface{} `json:"data"`
Error string `json:"error"`
}
使用Get方法实现用户信息验证接口
func (this *MainController) Login() {
userName := this.GetString("username")
passWord := this.GetString("password")
ret := tools.LoginMsgCheck(userName,passWord)//登录信息验证
if ret == true {
this.Data["json"] = models.GeneralResp{Code: 1}
}else{
this.Data["json"] = models.GeneralResp{Code: 0, Error: err.Error()}
}
this.ServeJSON()
}
如果你需要的数据可能是其他类型的,例如是 int 类型而不是 int64,那么你需要这样处理:
func (this *MainController) Get() {
id := this.Input().Get("id")
intid, err := strconv.Atoi(id)
}
再使用Post方法完成用户信息验证接口
在models中定义UserInfo结构
type UserInfo struct {
UserName string `json:"username"`
Password string `json:"password"`
}
Post方法实现用户信息验证接口
func (this *MainController) Login(){
var userInfo models.UserInfo
err := json.Unmarshal(this.Ctx.Input.RequestBody, &userInfo )
if err != nil {
this.Data["json"] = models.GeneralResp{Code: 0, Error: err.Error()}
this.ServeJSON()
return
}
ret := tools.LoginMsgCheck(userInfo.UserName,userInfo.PassWord)//登录信息验证
if ret == true {
this.Data["json"] = models.GeneralResp{Code: 1}
}else{
this.Data["json"] = models.GeneralResp{Code: 0, Error: err.Error()}
}
this.ServeJSON()
}
更多其他的 request 的信息,用户可以通过 this.Ctx.Request 获取信息,关于该对象的属性和方法参考手册Request。
获取 Request Body 里的内容
在 API 的开发中,经常会用到 JSON 或 XML 来作为数据交互的格式,如何在 beego 中获取 Request Body 里的 JSON 或 XML 的数据呢?
1、在配置文件里设置 copyrequestbody = true
2、在 Controller 中
func (this *ObejctController) Post() {
var ob models.Object
json.Unmarshal(this.Ctx.Input.RequestBody, &ob)
objectid := models.AddOne(ob)
this.Data["json"] = "{\"ObjectId\":\"" + objectid + "\"}"
this.ServeJson()
}
注意事项
配置文件中一定要加copyrequestbody = true
否则会打印错误信息:SyntaxError: Unexpected end of JSON input
如有不对欢迎指正,相互学习,共同进步。