前面两篇文章分析了OpenStack同一组件下不同模块之间的通信方式——RPC。这篇文章我们来继续看一下OpenStack中的另一种通信方式——RESTful API。
在OpenStack中,RESTful API用于不同组件之间的通信。先来简单的了解一下REST吧。
REST构建于HTTP协议之上,遵循并扩展和规范了传统HTTP协议中的标准方法,以下是RESTful API定义的标准方法:
GET:查询资源
POST:增加资源
PUT:更新资源
HEAD:验证,包括用户身份的验证和资源的验证
DELETE:删除资源
同时,REST要求URL的格式遵守统一的规范,所有资源都具有唯一的ID。具体到OpenStack中,每个资源都有一个UUID,作为全局唯一的标识。
在OpenStack中,所有的Web服务都是通过WSGI部署的。所谓WSGI是Python Web Server Gateway Interface的缩写,是Python应用程序或框架和Web服务器之间的一种接口。简而言之,在Python Web 开发中,服务端程序可以分为两个部分,一是服务器程序,二是应用程序。前者负责把客户端请求接收,整理,后者负责具体的逻辑处理。WSGI 是服务器程序与应用程序的一个约定,它规定了双方各自需要实现什么接口,提供什么功能,以便二者能够配合使用。
本着设计的“开闭原则”,OpenStack通过配置文件来配置WSGI服务的应用程序,PasteDeploy就是专门定制WSGI服务的开发包。
来看一个简单的利用PasteDeploy定制的WSGI服务。
1)api-paste.ini配置文件
OpenStack中,大部分组件的WSGI服务的配置是保存在api-paste.ini文件中的。这里也用这样的方式,api-paste.ini配置文件如下
[app:main]
paste.app_factory = wsgi_paste:app_factory
以上配置中,第01行定义了名为main的app。app(应用程序)是PasteDeploy定义的一类部件。除了app外,PasteDeploy还定义了filer(过滤器)、pipeline(管道)和composite(复合体)等部件。第02行指定了main应用程序对应的工厂方法,该工厂方法必须返回一个方法的实例,该方法便是处理HTTP请求的应用程序。这个应用程序定义在wsgi_paste包的app_factory方法。
2)wsgi_paste.py文件
在api-paste.ini配置文件中引用的