仿Openstack的WSGI接口及RESTul服务实现是怎样的
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这期内容当中小编将会给大家带来有关 仿Openstack的WSGI接口及RESTul服务实现是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Openstack
千家信息网最后更新 2025年01月31日仿Openstack的WSGI接口及RESTul服务实现是怎样的
这期内容当中小编将会给大家带来有关 仿Openstack的WSGI接口及RESTul服务实现是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
Openstack的WSGI接口通过webob,pastedeploy,routes实现了Controller类,和Router类,这里仿照Openstack的WSG接口实现简单的测试程序首先是testroutes.py文件
import loggingimport osimport webob.dec import webob.excfrom paste.deploy import loadappfrom wsgiref.simple_server import make_server import routes.middleware # Environment variable used to pass the request contextCONTEXT_ENV = 'openstack.context'# Environment variable used to pass the request paramsPARAMS_ENV = 'openstack.params'LOG = logging.getLogger(__name__)class Controller(object): @webob.dec.wsgify def __call__(self, req): arg_dict = req.environ['wsgiorg.routing_args'][1] action = arg_dict.pop('action') del arg_dict['controller'] context = req.environ.get(CONTEXT_ENV, {}) context['query_string'] = dict(req.params.iteritems()) context['headers'] = dict(req.headers.iteritems()) context['path'] = req.environ['PATH_INFO'] params = req.environ.get(PARAMS_ENV, {}) for name in ['REMOTE_USER', 'AUTH_TYPE']: try: context[name] = req.environ[name] except KeyError: try: del context[name] except KeyError: pass params.update(arg_dict) # TODO(termie): do some basic normalization on methods method = getattr(self, action) result = method(context, **params) return webob.Response('OK') def getMessage(self,context, user_id): return {'Message': 'TestMessage'} pass class Router(object): def __init__(self): self._mapper = routes.Mapper() self._mapper.connect('/test/{user_id}', controller=Controller(), action='getMessage', conditions={'method': ['GET']}) self._router = routes.middleware.RoutesMiddleware(self._dispatch, self._mapper) @webob.dec.wsgify def __call__(self, req): return self._router @staticmethod @webob.dec.wsgify def _dispatch(req): match = req.environ['wsgiorg.routing_args'][1] if not match: return webob.exc.HTTPNotFound() app = match['controller'] return app @classmethod def app_factory(cls, global_config, **local_config): return cls() if __name__ == '__main__': configfile='testroutes.ini' appname="main" wsgi_app = loadapp("config:%s" % os.path.abspath(configfile), appname) httpd = make_server('localhost', 8282, wsgi_app) httpd.serve_forever()
然后是testroutes.ini文件
[DEFAULT]name=huang[composite:main]use=egg:Paste#urlmap/=show[pipeline:show]pipeline = root[app:root]paste.app_factory = testroutes:Router.app_factory
由此可见,ini文件按照pastedeploy的模式配置了根目录/,指向pipeline show,pipeline又指向app root。app下指向的是Router的app_factory函数,返回的是Router().根据调用过程,初始化__init__->__call__返回self._routers.根据__init__下写的映射规则,能识别类似/test/123这样的路径,其处理函数调用"Controller"的"action"函数,也就是getMessage。
测试运行,在浏览器下输入127.0.0,1:8282/test/123
返回OK,如
return webob.Response('OK')
上述就是小编为大家分享的 仿Openstack的WSGI接口及RESTul服务实现是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
接口
函数
指向
文件
服务
内容
分析
测试
专业
中小
也就是
内容丰富
就是
文章
更多
根目录
模式
浏览器
由此
由此可见
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
hive查询数据库表
潮流网络技术老板
海南众道生鲜软件开发
it行业证书 网络安全
软件开发测试员工资
网络技术里as什么意思
代理网络安全管理体系认证流程
移动光猫服务器可以选择吗
百胜全渠道零售 数据库
江苏移动家客网络技术支撑
vb数据库执行多个sql
品牌服务器一般多少钱
互联网科技公司有哪些最有名
数据库元数据同步
poi数据库
网络安全法调整的范围包括
网络安全通识培训心得
连接csgo服务器
软件开发模型 螺旋
互联网科技产品购销合同
创业之星服务器
我的世界服务器为啥没tp权限
公安机关网络安全宣传活动总结
自建语音服务器
关于计算机网络技术知识书
昆仑乐享网络技术有限公司
网络安全法自什么时候施行
深圳市美魅网络技术有限公司
怎么管理好自己的服务器
互联网科技公司有哪些最有名