openstack api服务分析
来源:互联网 发布:网络准入软件 编辑:程序博客网 时间:2024/05/22 04:59
先粗略了解几个名词:
- RESTful API:表征状态迁移,也就是说客户端使用http的基本操作(主要四种:get,post,put,delete对应增删改查)使服务端的资源状态转化。
- WSGI:web server gateway interface,直译过来web服务网关接口,可以看作一个桥梁,一端连着服务端(wsgi server),一端连接应用程序(wsgi app),桥体(wsgi middleware),也就是说wsgi server 直接处理客户端的http请求,将请求内容转译为应用app能够处理的对象。
api服务是入口,主要把客户端发送http请求映射到具体处理函数上,主要涉及三个模块
- paste.deploy:构建openstack的wsgi服务,etc下面都会有对应项目的paste的文件,nova为例子,位于/etc/nova/api-paste.ini,paste.deploy构建wsgi服务就是基于这个配置文件
- webob:对wsgi的请求和响应进行封装(将wsgi与应用app的信息进行处理,使应用端更方便去进行处理,可以放入wsgi模块内理解)
- routes:定义url到内部函数的映射。
解析api-paste.ini(参考资料)
############## OpenStack ############### composite 类型表示把url请求发到对应的application,use表示使用的方式[composite:osapi_compute]use = call:nova.api.openstack.urlmap:urlmap_factory/: oscomputeversions/v1.1: openstack_compute_api_v21_legacy_v2_compatible/v2: openstack_compute_api_v21_legacy_v2_compatible/v2.1: openstack_compute_api_v21......# 使用paste.filter_factory方法过滤[filter:request_id]paste.filter_factory = oslo_middleware:RequestId.factory......# app代表具体的application应用[app:osapi_compute_app_legacy_v2]paste.app_factory = nova.api.openstack.compute:APIRouter.factory......# pipeline由一系列filter组成,末尾是app(多个filter可采用这种方式)[pipeline:oscomputeversions]pipeline = faultwrap oscomputeversionappdeploy将以“/v2.1”开始的url将交给名为openstack_compute_api_v2.1处理。但openstack_compute_api_v2.1怎么将/v2.1/project_id/servers/的GET请求交给nova.api.openstack.compute.servers.Controller.index()处理,并且将POST请求交给create()处理呢;怎么将/v2.1/project_id/servers/id的GET请求交给show()处理呢?
这个就是routes.mappers所提供的功能,它根据path和请求方法,将请求映射到具体的函数上。如在nova中,添加/v2.1/project_id/servers/{list_vm_state, os_vmsum}两个GET请求来分别获取指定VM的状态和VM的总数。可在nova.api.openstack.compute.APIRouter21中添加如下两行,将请求分别交给list_vm_state和os_vmsum两个函数处理并返回结果:
self.resources['servers'] = servers.create_resource(ext_mgr) mapper.resource("server", "servers", controller=self.resources['servers'], collection={'list_vm_state': 'GET', 'os_vmsum': 'GET'})
另外一个繁琐的方法,一个一个加:
mapper.connect("server", "/{project_id}/servers/list_vm_state", controller=self.resources['servers'], action='list_vm_state', conditions={'list_vm_state': 'GET'}) mapper.connect("server", "/{project_id}/servers/os_vmsum", controller=self.resources['servers'], action='os_vmsum', conditions={'os_vmsum': 'GET'})
现在来捋一下路径。
/v2.1 -> /v2.1/project_id/servers/list_vm_state
0 0
- openstack api服务分析
- openstack之nova-api服务流程分析
- openstack之nova-api服务流程分析
- OpenStack源码分析之cinder-api服务启动
- OpenStack之Nova分析——Nova API服务
- OpenStack : Nova API 分析
- Openstack Api分析(一)
- Openstack Api分析(二)
- Openstack Api分析(三)
- Openstack Nova API服务流程
- openstack nova api模块分析
- openstack nova api模块分析
- 【OpenStack源码分析之四】WSGI与Nova API服务启动
- 0.1-OpenStack服务—Restful API
- openstack nova-api 服务流程介绍
- openstack安装glance-api服务启动失败
- openstack-nova-API解析流程分析
- openstack中API调用源码分析
- 天梯赛练习集L1-014(Java)
- 不要相信程序员在加班时间写的代码
- zzu数学 实验五素数问题
- linux C编程(三)ANSI C中的类型限定词(const/volatile/restrict)
- Git与SVN的比较
- openstack api服务分析
- 屏&幕&截&图
- 部署Wordpress博客平台
- Mac下抓包工具Charles
- android studio 卡顿
- 冒泡排序(2)
- DatePickerDialog的使用
- 5-Spark高级数据分析-第五章 基于K均值聚类的网络流量异常检测
- zzu数学 实验六骰子问题