仿Openstack的WSGI接口及RESTul服务实现是怎样的
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这期内容当中小编将会给大家带来有关 仿Openstack的WSGI接口及RESTul服务实现是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Openstack
千家信息网最后更新 2025年12月03日仿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安全错误
数据库的锁怎样保障安全
网易服务器崩了怎么补偿玩家
海南特色软件开发平均价格
数据库系统性能参数比较
游戏软件开发市场前景
赫山市公安局网络安全攻防演练
疫情对敏捷软件开发
管家婆进销存数据库配置
win10可以安装数据库
软件开发产品经理基础
暴雨软件开发
数据库写入量
计算机软件开发有哪些
军武数据库高射机枪
寒假 护苗 --网络安全
工业企业网络安全工作总结
网络安全监管培训教材
当前数据库安全等级
网络安全宣传周结束语
财务资料放云服务器安不安全
快递 数据库
网络安全竞技平台
网络安全审计系统排名
科技网络技术有限公司
电脑如何解决网络安全问题
计算机网络技术专升本难度
繁昌县浩娜网络技术有限公司
服务器进入
区县网络安全调研报告
晋城银行 软件开发岗 待遇
学软件开发就业前景怎么样