使用Golang构建web服务还是比较简单的,使用net/http和gorilla/mux就能快速的构建一个简易的web server
这样一个简易的静态服务器就构建成功了。
当然我们不可能就这么满足了,我们当然希望这个服务器是可以处理一些业务逻辑的。比如登录:
handler怎么写呢:
controller(使用mymysql连接数据库):
将用户名放到cookie里就当登录成功了。
如果有多个路由需要处理呢,情形就会变成这样:
|
|
好像也无伤大雅,但是如果有更一步的需求,每个URL需要做权限验证,记录日志,这种方式显然就不太合理了,我们需要对router做统一的管理,这里我们跳过了handler层,直接由controller来处理,我觉得更简洁一点。
这时候如果添加权限验证,只有通过登录验证的用户才有权限调用,这就需要中间件(我个人比较喜欢称它装饰器)出场了:
|
|
显然这样管理session是比较粗糙的,怎么办,有现成的解决方案,jwt(JSON Web Tokens),我们可以使用jwt-go来生成token,如果一个请求cookie或者header里面含有token,并且可以验证通过,我就认为这个用户是合法用户:
|
|
Auth中间件就可以变成下面的样子:
|
|
我们还可以对每个URL实现log记录:
|
|
有跨域的需求?好办:
|
|
session管理好像还有一些问题,每个request请求都会改变全局的CurrenUser,如果有并发的情况下,这就容易产生混乱了,可以需要用户信息的时候通过token去数据库来取,效率会有影响,但并发的问题可以解决了:
|
|
日志的问题好像还没有解决,毕竟日志需要写到文件里面并且需要一些详细的信息,比如行号,文件,才能利于排查问题,或者做统计:
|
|
日志写到文件的问题解决了,又面临新的问题,日志文件太大,怎么办,需要归档(每隔12小时就查看一下日志文件多大了,如果太大了就压缩一下归档):
|
|
基本的功能好像都能解决了,饱暖思淫欲,错误处理感觉用起来不怎么舒服,有更优雅的办法:
|
|
这样基本的web框架就完成了,想添加一些命令行工具,比如自动生成app,推荐用kingpin来实现:
|
|
执行beauty命令是这样的:
到此,这个框架还在不断的优化中,希望能有人提供宝贵的批评和建议。
以下是代码地址:
谢谢!