Openstack Api分析(一)

转自http://www.choudan.net/2013/07/30/OpenStack-API%E5%88%86%E6%9E%90(%E4%B8%80).html

前言

这一篇文章重点介绍,OpenStack Nova中是如何定义各种API的,怎样完成HTTP Request最终路由到具体的某个函数调用上的。

概念

在paste deploy一文中已经知道了,Nova API的启动最终会运行到APIRouter class的构造函数中来,由该函数发散出去,就完成了整个Nova API的启动,该构造函数主要做了下面几件事。

1.创建一个ExtensionManager,用来加载所有的扩展资源(Extension) 2.调用routes的
Mapper.resource方法完成对核心资源的定义,建立路由规则 3.调用routes的
Mapper.resource方法完成对扩展资源的定义,也建立路由规则 4.将扩展资源对核心资源扩
展的action或extends注册,其实action,extends就是该资源的某个方法

Nova API service 接收到HTTP请求之后,处理过程主要分为四个阶段:

1.首先通过WSGI Server将HTTP request封装成wsgi request 2.使用api-
paste.ini文件中定义的Filter对wsgi request进行处理 3.处理完毕后,就根据mapper
中的记录,将不同的请求路由到不同的WSGI APP 4.WSGI APP接收到请求之后,并将请求
disptach到controller中的方法上

如果没有仔细阅读源码或者没了解Restful中强调的资源,可能就对上面提到的杂乱概念毫无头绪。下面就列出一些关键概念,帮助理解。前面多次强调,Restful中,一切都是围绕资源进行操作。OpenStack就定义了两种类型的资源。

  • core resource: 核心资源,我们可以在./nova/api/openstack/compute/目录下面看到servers.py, ips.py,images.py等等文件,它们就是核心资源,可以看出这些资源是云平台的最基础的东西。
  • extension resource: 扩展资源,在./nova/api/openstack/compute/contrib/目录下面有很多文件,这些都是扩展资源,非核心的,例如keypairs.py等等,扩展资源又分为两种情况:1. 扩展资源本身也是一种资源,只是没那么核心,2. 扩展资源是对核心资源的扩展丰富,例如keypairs就扩展了servers核心资源;当然扩展资源也可以同时具备这两种情况。

了解所谓的资源之后,我们还需要了解controller,所谓的controller实际上就是代表对该资源的操作集合,controller中定义了很多的操作,有基本的CRUD操作,还有其他杂七杂八满足我们功能需要的操作,这些操作大致上也可以分为三类:

  • CRUD: 最基本的操作,对资源的index,create,delete,show,update。
  • action: 基本操作不可能满足所有对资源的操作,若要增加,则使用@wsgi.action装

  • extends: 使用来@wsgi.extends装饰了的函数,如果扩展资源扩展某个核心资源,扩展资源增加的函数就会添加这个装饰

下一个需要了解的概念便是WSGI APP,在OpenStack中,定义了很多的资源,每个资源有一些操作函数,最终,这每一个资源组成了一个单一的WSGI APP,这就说明了,一个WSGI Server可以对应多个WSGI APP,这样保证了资源之间的独立性。

最后一个是,ExtensionManager,存在这么多的资源,需要使用一个较好的方式对他们进行管理,能够方便的为后期添加更多的资源,丰富OpenStack的API。这样就出现了ExensionManager,对这些扩展资源进行统一的管理。

有了这些基本的概念之后,再回过头来看前面的流程,应该是更加清晰了。下一篇,就使用代码来分析这些文章提到的内容。

你可能感兴趣的:(api,openstack)