PasteDeploy部署Pecan API 服务

part 1:请求处理

使用PasteDeploy模块来实现 WSGI Services 时,都需要加载一个 paste.ini 文件,文件用来定义服务过滤和请求路由,类似于springMvc的拦截器。pecan是一个对象路由框架,这里的请求路由是版本v1或者v2对应的不同处理。在api_paste.ini文件中定义如下:

[pipeline:main]
pipeline = request_id  api-server

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

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

pipeline中定义请求顺序,请求先通过request_id这个拦截器,然后再到api-server这个服务。【app: api-server】定义web服务名api-server

paste.app_factory = caesarlinsa.api.app:app_factory 服务的入口方法caesarlinsa.api.app中的def app_factory()返回application服务对象,详见下:

def app_factory(global_config, **local_conf):
    return VersionSelectorApplication()
VersionSelectorApplication类的定义如下,用于对不同版本路径处理,如果是v1返回404 Not Found。
class VersionSelectorApplication(object):
    def __init__(self):
        pc = get_pecan_config()

        def not_found(environ, start_response):
            start_response(‘404 Not Found‘, [])
            return []

        self.v1 = not_found
        self.v2 = setup_app(pecan_config=pc)# load_app()加载配置文件api_paste.ini创建application服务

    def __call__(self, environ, start_response):
        if environ[‘PATH_INFO‘].startswith(‘/v1/‘):
            return self.v1(environ, start_response)
        return self.v2(environ, start_response)

使用pecan创建application使用方法pecan.make_app,VersionSelectorApplication是对pecan返回的application的封装,self.v2(environ,start_response)

part2: 开启服务

def build_server():
    app = load_app()
    # Create the WSGI server and start it
    host, port = cfg.CONF.api.host, cfg.CONF.api.port

    LOG.info(‘Starting server in PID %s‘ % os.getpid())
    LOG.info("Configuration:")
    cfg.CONF.log_opt_values(LOG, logging.INFO)

    if host == ‘0.0.0.0‘:
        LOG.info(
            ‘serving on 0.0.0.0:%s, view at http://127.0.0.1:%s‘
            % (port,  port))
    else:
        LOG.info("serving on http://%s:%s"  % (host, port))

    serving.run_simple(cfg.CONF.api.host, cfg.CONF.api.port,
                       app, processes=CONF.api.workers)

建立服务web服务器,等待请求

原文地址:https://www.cnblogs.com/CaesarLinsa/p/pecan.html

时间: 2024-08-01 05:20:13

PasteDeploy部署Pecan API 服务的相关文章

Centos7部署kubernetes API服务(四)

1.准备软件包 [[email protected] bin]# pwd /usr/local/src/kubernetes/server/bin [[email protected] bin]# cp kube-apiserver kube-controller-manager kube-scheduler /opt/kubernetes/bin/ 2.创建生成CSR的JSON配置文件 [[email protected] bin]# cd /usr/local/src/ssl/ [[emai

pecan API调用

1.在PasteDeploy部署caesar-api服务时,setup_app中建立app,app中设置hooks,hooks负责加载conf配置文件和数据库连接 self.storage_connection. 从而在请求访问时可以调用对应钩子对象的方法. def setup_app(pecan_config=None, extra_hooks=None): # FIXME: Replace DBHook with a hooks.TransactionHook app_hooks = [ho

【重学Node.js 第1&2篇】本地搭建Node环境并起RESTful Api服务

本地搭建Node环境并起RESTful Api服务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https://github.com/hellozhangran/happy-egg-server 说明:本想分两章讲环境搭建和起api服务,但操作下来确实过于简单.但考虑到整个系列的完整性也不能不讲,那就把这两篇合二为一吧 本地搭建Node环境 开发环境主要是指Node.MongoDB.本人是用的mac电脑,

Linux网络服务11——部署YUM仓库服务

Linux网络服务11--部署YUM仓库服务 一.YUM简介 YUM的前身是YUP(Yellow dog Updater)Yellow dog Linux的软件更新,最初由TSS公司(Terra Soft Solutions,INC.)使用Python语音开发而成,后由杜克大学(Duck University)的Linux开发队伍进行改进,命名为YUM(Yellow dog Updater , Modified) 借助于YUM软件仓库,可以完成安装.卸载.自动升级rpm软件包等任务,能够自动查找

[CI] 使用CodeIgniter框架搭建RESTful API服务

在2011年8月的时候,我写了一篇博客<使用CodeIgniter框架搭建RESTful API服务>,介绍了RESTful的设计概念,以及使用CodeIgniter框架实现RESTful API的方法.转眼两年过去了,REST在这两年里有了很大的改进.我对于前一篇博客中的某些方面不是很满意,所以希望能利用这次机会写一个更加完善的版本.我的项目基于Phil Sturgeon的CodeIgniter REST Server,遵循他自己的DBAD协议.Phil的这个项目很棒,干净利落,简单实用,并

延迟调用或多次调用第三方的Web API服务

当我们调用第三方的Web API服务的时候,不一定每次都是成功的.这时候,我们可能会再多尝试几次,也有可能延迟一段时间再去尝试调用服务. Task的静态方法Delay允许我们延迟执行某个Task,此方法可以让我们做到延迟一段时间再去调用服务:多尝试几次调用如何实现呢?可以用循环遍历. 在"使用HttpClient对ASP.NET Web API服务实现增删改查"中,创建了一个ASP.NET Web API项目,本篇沿用此Web API服务. 在ASP.NET Web API项目的同一个

ServiceStack.Hello——跨平台.net REST api服务搭建

ServiceStack.Hello——跨平台.net REST api服务搭建 自己创建: https://github.com/ServiceStack/ServiceStack/wiki/Create-your-first-webservice 直接下载源码: https://github.com/ServiceStack/ServiceStack.Examples/tree/master/src/ServiceStack.Hello 在VS2013中启动项目: 查看metadata: h

部署ftp文件共享服务

部署ftp文件共享服务 一.部署ftp服务 常用的部署网络服务的步骤: 部署 FTP 服务器 ? FTP ( 文件传输协议 ) 是 INTERNET 上仍常用的最老的网络协议之一 , 它为系统提供了通过网络与远程服务器进行传输的简单方法 ? 在 RED HAT ENTREPRISE LINUX 6 中. FTP 服务器包的名称为 VSFTPD , 它代表 Very Secure File Transfer Protocol Damon 服务器名称也叫做 vsftpd ? 默认配置文件让 ANON

Retrofit 2.0 接口API服务代码

接口API服务代码 接口定义有以下的配置方式, 取决于接口的参数需求(使用注解方式标注请求模板接口) // 可以直接在URL中指定参数 @GET("version/android/2.3.0?order=desc") Call<VersionInfoDTO> loadVersionInfo(); // 设置POST请求体 @POST("users/new") void createUser(@Body User user, Callback<Use