user
API
user的API有如下几个:
以上七个API匹配以下三行代码中的路由:
由此可以看出,user的API请求都在UserAPI这个结构体中,该结构体定义在/api/user.go当中。
结构体
BaseAPI定义在/api/base.go文件中,如下:
获取及验证Header中的用户
首先,我们介绍一下UserAPI中的userID、currentUserID、IsAdmin等五个参数是如何获取的。UserAPI继承了baseAPI,而baseAPI实际上就是继承了beego.Controller。UserAPI重写了beego.Controller的Prepare()函数,该函数会在Get()、POST()等函数之前执行。
Prepare()函数的代码如下:
AuthMode:通过配置文件获取,对应第(3)行代码
SelfRegistration:通过配置文件获取,对应第(5)行代码
IsAdmin:对应第(39)行代码,得到currentUserId后,再从数据库查询该user是否为管理员用户
userId:对应第(16)行代码,从路径参数中获取。如果请求的URL为
API对应的处理函数
GET /users
根据router中的路由规则,该API对应UserAPI中的GET()方法,GET()方法的源码见下面。第(2)行代码中当 ua.userId == 0
成立时,表示请求的URL为/users
(可以通过Prepare()函数分析得出)。于是,我们只需要关注第一个if语句中的代码。在源代码的后面,本人做了简单的注释。
GET /users/current
根据router中的路由规则,该API也是对应UserAPI中的GET()方法,GET()方法的源码见下面。该URL对应的代码为Get()中的else if块,满足的条件为ua.userID == ua.currentUserID
(可以通过Prepare()函数分析得出)。于是,我们只需要关注相应的代码,该函数中的其他代码块已省略。在源代码的后面,本人做了简单的注释。
POST /users
start here
Last updated
Was this helpful?