起因

polaris虽然是模仿tornado开发,但我觉得作为一个go的web框架,还需要提供一些额外的扩展支持。

polaris现在已经支持session以及middleware,主要参加django。

polaris对于这些额外功能的支持,采取的是注册 + json配置驱动的方式。这个跟go的database/sql有点类似,任何模块都提供一套类似如下的接口:

type Obj interface {

}

type Driver interface{
Open(jsonConfig json.RawMessage) (Obj, error)
} func Register(name string, driver Driver) error
func Open(name string, jsonConfig json.RawMessage) (Obj, error)

如果我们需要自定义功能,只需要实现自己的driver以及对应的obj,然后Register进去,后续就可以通过Open直接使用了。

对于每个模块的配置,因为polaris的整体配置是json,所以我也强制要求参数是json格式的,也就是json.RawMessage,各个模块自行进行Unmarshal处理。

session

对于一个session对象,无非就是Set,Get,Delete等,polaris需要关心的是这个session对应的store。store可以理解为该session的持久化保存位置,可以是db,redis,cookie或者memory。

polaris提供的store接口如下:

type Store interface {
//get a session by id
//if no session exist, regenerate another id to new a session
Get(id string) (*Session, error) //delete session from store
Delete(*Session) error //Save session to stroe
Save(*Session) error
} type Driver interface {
Open(jsonConfig json.RawMessage) (Store, error)
}

现阶段,只提供了redis的支持,这里特别说明一下,我是在现在才知道redis有一个setex命令,想想以前经常用set + expire来设置一个key以及超时,想想都汗颜。

对于session的持久化,polaris提供了codec的接口,外部可以注册自己的序列化方式,同时在相应的store里面实现。对于一个codec,接口如下:

//codec for session encode and decode
type Codec interface {
Encode(values map[interface{}]interface{}) ([]byte, error)
Decode(buf []byte) (map[interface{}]interface{}, error)
} func RegisterCodec(name string, codec Codec) error
func GetCodec(name string) (Codec, error)

现阶段,polaris提供了gob方式的codec。外部通过GetCodec("gob")就可以获取到。

middleware

polaris的middleware主要提供如下接口:

type Middleware interface {
ProcessRequest(env *context.Env) error
ProcessResponse(env *context.Env) error
}

context.Env是该次请求的上下文环境,对于每次http请求,polaris会首先调用middleware的ProcessRequest,在处理实际对应的restful接口,然后再调用ProcessResponse。

如果Process的时候,返回error,或者env已经finished,polaris会终止后续的process操作。这套处理流程是否合适后续在好好考量。

现阶段,polaris提供了session middleware的支持。

Todo

polaris采用注册 + json配置的方式,我觉得可以很好的处理后续模块功能的添加问题,后续可以参考django等框架继续完善。

polaris: session和middleware的支持的更多相关文章

  1. Session配置之WebApi支持

    1.在WebApiConfig中建立建立HttpControllerHandler和HttpControllerRouteHandler 并覆写它 public class SessionRouteH ...

  2. polaris: 一个用go实现的支持restful的web框架

    介绍 polaris是一个用go实现的支持restful的web框架,主要参考tornado进行设计. 虽然在go里面搭建一个http server非常的简单,这里强烈推荐gorilla,但并没有很好 ...

  3. thinkphp session支持

    系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的session函数完成,该函数可以完成Session的设置.获取.删除和管理操作. session初始化设置 如果session ...

  4. django的cookie和session以及内置信号、缓存

    cookie和session cookie和session的作用: cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话.两者最大的区别是cookie的信息是存放在浏览 ...

  5. python Django session/cookie

    一, Cookie #cookie # def cook1(request): # print(request.COOKIES) # 查看cooke # # print(request.get_sig ...

  6. Django实现表单验证、CSRF、cookie和session、缓存、数据库多表操作(双下划綫)

    通常验证用户输入是否合法的话,是前端js和后端共同验证的,这是因为前端js是可以被禁用的,假如被禁用了,那就没法用js实现验证合法与否了,也就是即使用户输入的不合法,但是也没提示,用户也不知道怎么输入 ...

  7. Django之Form、CSRF、cookie和session

    Django是一个大而全的web框架,为我们提供了很多实用的功能,本文主要介绍Form.CSRF.cookie和session 一.Form 在web页面中form表单是重要的组成部分,为了数据安全和 ...

  8. python_way day19 HTML-day5 (form表单验证,CSRF,cookie,session,缓存)

    python-way day19 1. dJango的form表单验证 2.CSRF 跨站请求伪造 3.cookie,session 4.缓存 一,django表单验证功能 1.django验证基础: ...

  9. python运维开发(十九)----Django后台表单验证、session、cookie、model操作

    内容目录: Django后台表单验证 CSRF加密传输 session.cookie model数据库操作 Django后台Form表单验证 Django中Form一般有2种功能: 1.用于做用户提交 ...

随机推荐

  1. 安装redis 执行make命令时报错解决方法

    一.未安装GCC 解决方法:执行yum install gcc-c++命令安装GCC,完成后再次执行make命令 yum install gcc-c++ Linux无法连接网络 http://www. ...

  2. Python中迭代输出(index,value)的几种方法

    需求如下:迭代输出序列的索引(index)和索引值(value). 1.创建测试列表: >>> lst = [1,2,3,4,5] 2.实现方法如下: #方法1:range()+le ...

  3. ngx.ctx

    https://github.com/openresty/lua-nginx-module#ngxctx 要点 生命周期和请求一致 每个请求的ngx.ctx是相互独立的,包括ngx.location. ...

  4. foxit pdf强制页面视图所有情况都为'合适宽度'

    在左边的书签点击时,有时明明已经设置为合适宽度,但foxit会自动给你变为'合适页面'.真是莫名其妙的设置.好在可以这样更改:

  5. java泛型总结(类型擦除、伪泛型、陷阱)

    JDK1.5开始实现了对泛型的支持,但是java对泛型支持的底层实现采用的是类型擦除的方式,这是一种伪泛型.这种实现方式虽然可用但有其缺陷. <Thinking in Java>的作者 B ...

  6. 这一次,VR离我们真的很近

           从高考作文开始       今年号称是VR元年,虽然目前VR还没能像手机一样走进千家万户,但关于VR设备的关讨论是层出不穷.而今年高考,浙江省的作文题就与VR相关.网上购物.视频聊天等在 ...

  7. activiti实战系列 activiti连线

    11:连线 11.1:流程图 注意:如果将流程图放置在和java类相同的路径,需要配置: 11.2:部署流程定义+启动流程实例 11.3:查询我的个人任务 11.4:完成任务 说明: 1)使用流程变量 ...

  8. Apache Beam—透视Google统一流式计算的野心

    Google是最早实践大数据的公司,目前大数据繁荣的生态很大一部分都要归功于Google最早的几篇论文,这几篇论文早就了以Hadoop为开端的整个开源大数据生态,但是很可惜的是Google内部的这些系 ...

  9. Dynamics CRM2015 Update1 新功能之表单增强功能

    CRM2015 Update 1发布后,系统的界面的变化很大,仔细观察后会发现表单窗体也有些不同了,在CRM2015 Update1的官方介绍中对此变化的解释是起用了新的窗体呈现引擎,让界面更好看加载 ...

  10. 抽屉效果的实现(DrawerLayout和SlidingMenu的对比)

    在做谷歌电子市场的时候用的是DrawerLayout实现的抽屉效果,在新闻客户端的时候用的是开源框架SlidingMenu来实现的,总的来说,各有个的优点,侧滑(开源框架)实现的效果更好,但是Draw ...