李成石

导航

 

在pecan中存在一个请求配置文件,定义服务启动程序app和过滤器filter,例如:

[pipeline:main]
pipeline =  request_id  sizelimit  api-server

[filter:request_id]
paste.filter_factory = oslo_middleware:RequestId.factory

[filter:sizelimit]
paste.filter_factory = oslo_middleware.sizelimit:RequestBodySizeLimiter.factory

[app:api-server]
paste.app_factory = caesarlinsa.api.app:app_factory

在pipline中定义过滤规则,最后一个为app。如果顺序存在问题,则会报错如下:

定义的过滤器,对request header或者requst_id等参数进行增删校验。在对app处理进行过滤时,需要定义一个filter_app,对请求参数校验。上面定义一个requst_id,在响应头中添加requst id, sizelimit对请求的长度进行校验,过长会抛出异常。但是有一点需要注意,在任何一个过滤器中调用response = req.get_response(self.application),都会获取api访问的响应。

如果每个过滤器中都进行调用,整个流程走下来,会调用好几次api中接口。以下为在每个filter中加入获取响应并打印的过程,过滤器中获取的响应会存在stack中,在调用服务api时检查响应是否存在,如果存在,则不调用服务api,不存在则调用。该例中,在filter中获取两次,在服务api中并未进行调用,直接返回响应。

posted on 2019-04-23 01:30  李成石  阅读(428)  评论(0编辑  收藏  举报