之前一直想寫博客,但因各類因素一直沒寫。最近在作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建立不了用戶。