之前一直想写博客,但因各类因素一直没写。最近在作OpenStack,而OpenStack对外提供REST API,今天就简要介绍一下OpenStack REST API 使用,关于什么是REST API能够参考如下两篇博文:html
http://www.choudan.net/2013/07/28/OpenStack-Restful-API.htmllinux
http://www.ruanyifeng.com/blog/2011/09/restful.html数据库
简单的来讲,一切都是资源,每一个资源对应一个URI。json
咱们可使用linux curl命令使用REST API向OpenStack发送请求,例如根据用户名、密码和tenant获得token:restful
curl -i 'http://127.0.0.1:5000/v2.0/tokens' -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d '{"auth": {"tenantName": "admin", "passwordCredentials": {"username": "admin", "password": "secretsecret"}}}'
可是我以为用curl命令不太方便,并且有时候返回结果很长很长的时候不太好看,因此就使用了RESTClient,由于是在CentOS环境下工做,因而在火狐下装了个RESTClient插件,像上面的请求能够轻松搞定,加入两个Header,若是要访问其余资源,则还另外须要一个Header:x-auth-token,选择一个Method,而后在Body里面写下须要的东西,截图以下:app
Body:curl
{ "auth":{ "passwordCredentials":{ "username":"admin", "password":"123456" }, "tenantName":"admin" } }
OpenStack的API大多都在官方文档中写了,为何说大多,而不是所有,是由于有些真没写,我以为其中没写的分两类:编码
举几个目前API文档中没写或者没有详细说明用法的API,好比:url
还有好多能够加query参数的API,就不一一列举了。spa
还有一个问题,在API文档中只有URL的后半部分,那么前半部分去哪了,前半部分就在当初安装OpenStack时建立的endpoint中,咱们可使用如下命令找到:
keystone endpoint-list keystone endpoint-get --service=XXX
在实际的编码中咱们固然不能在代码里把URL写死,应该经过查数据表获得各个服务的endpoint,而后生成完整的URL。细心的同窗就会发现,在每次认证的时候不只会返回token并且会返回serviceCatalog,里面就有咱们想要的endpoint,就没必要再单独再去查一次数据库了。
有个问题没太弄懂,不知是否有人解答一下:
keystone两个端口,一个是5000,一个是35357(adminURL)。两个权限不同,建立用户什么的必须用35357。我知道OpenStack采用Policy来管理某个用户在某个tenant下的权限。但后台具体是如何区分5000和35357的呢,怎样让35357能够建立用户而5000建立不了用户。