RackSpace提供基于RESTful方式訪問的API。通過結(jié)合jersey可以方便的操作。
具體的API參見:http://docs.rackspacecloud.com/servers/api/v1.0/cs-devguide-20091015.pdf.
介紹幾個(gè)常用的API:
返回的格式有兩種,1、JSON; 2、XML.這里都返回Json
一、認(rèn)證
通過RESTful方式訪問云,首先要進(jìn)行身份驗(yàn)證。
提供APIkey,通過驗(yàn)證后云會返回給你一個(gè)AuthToken和ServerManagementUrl。
AuthToken的有效期只有24個(gè)小時(shí),過期后需要重新認(rèn)證。
1 private final String BASE_URI = "https://auth.api.rackspacecloud.com/v1.0";
2 private String serverManagementUrl = null;
3 private String authToken = null;
4
5 public void auth() throws Exception {
6 Client client = new Client();
7 WebResource webResource = client.resource(BASE_URI);
8 ClientResponse response = null;
9
10 try {
11 response = webResource.header("X-Auth-User", "alps").
12 header("X-Auth-Key", "21fee63xxxxxxxx0").get(ClientResponse.class);
13 } catch (UniformInterfaceException ex) {
14 response = ex.getResponse();
15 }
16
17 int status = response.getStatus();
18 switch (status) {
19 case 204:
20 MultivaluedMap<String, String> headers = response.getHeaders();
21 serverManagementUrl = headers.get("X-Server-Management-Url").get(0);
22 authToken = headers.get("X-Auth-Token").get(0);
23 break;
24 default:
25 throw new UniformInterfaceException(response);
26 }
BASE_URL,是進(jìn)行身份認(rèn)證的一個(gè)url。如果認(rèn)證通過response code是204.沒有通過則返回401.
請求這個(gè)url時(shí),需要傳入兩個(gè)參數(shù)
1)X-Auth-User:用戶名(RackSpace帳號)
2)X-Auth-Key:API Key(點(diǎn)擊Control Panel的Your Account菜單下的API Access獲得)
如果驗(yàn)證成功,返回的Response如下:
HTTP/1.1 204 No Content
Date: Mon, 12 Nov 2007 15:32:21 GMT
Server: Apache
X-Server-Management-Url: https://servers.api.rackspacecloud.com/v1.0/35428
X-Storage-Url: https://storage.clouddrive.com/v1/CloudFS_9c83b-5ed4
X-CDN-Management-Url: https://cdn.clouddrive.com/v1/CloudFS_9c83b-5ed4
X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb
Content-Length: 0
Content-Type: text/plain; charset=UTF-8
兩個(gè)有用的信息是
1)X-Server-Management-Url:通過這個(gè)url可以對云進(jìn)行操作。
2)X-Auth-Token:身份令牌,每次操作時(shí)都要當(dāng)參入傳入,注意有時(shí)限,有效期為24小時(shí)。
二、獲得云里的服務(wù)器信息
Verb |
URL |
Desc |
Get |
/servers |
列出所有的server(只有id和name) |
Get |
/servers/detail |
列出所有的server(詳細(xì)信息) |
正常的Response Code:200,203
錯(cuò)誤的Response Code:cloudServersFault (400, 500), serviceUnavailable (503), unauthorized (401), badRequest (400), overLimit (413)
查詢詳細(xì)信息
1 public void getAllserverInfo() throws Exception {
2 Client client = new Client();
3 WebResource webResource = client.resource("https://servers.api.rackspacecloud.com/v1.0/35428/servers/detail");
4 ClientResponse response = null;
5 try {
6 response = webResource.header("X-Auth-Token", authToken).get(ClientResponse.class);
7 } catch (Exception e) {
8 e.printStackTrace();
9 }
10
11 int status = response.getStatus();
12 switch (status) {
13 case 200:
14 case 203:
15 System.out.println(IOUtils.toString(response.getEntityInputStream()));
16 break;
17 default:
18 throw new UniformInterfaceException(response);
19 }
20 }
Sample JSON Response (detail)
1  {
2 "servers" :
3 [
4 {
5 "id" : 1234,
6 "name" : "sample-server",
7 "imageId" : 2,
8 "flavorId" : 1,
9 "hostId" : "e4d909c290d0fb1ca068ffaddf22cbd0",
10 "status" : "BUILD",
11 "progress" : 60,
12 "addresses" : {
13 "public" : [
14 "67.23.10.132",
15 "67.23.10.131"
16 ],
17 "private" : [
18 "10.176.42.16"
19 ]
20 },
21 "metadata" : {
22 "Server Label" : "Web Head 1",
23 "Image Version" : "2.1"
24 }
25 }
26 ]
27 }
三、創(chuàng)建云中的服務(wù)器
Verb |
URI |
Desc |
Post |
/servers |
創(chuàng)建新服務(wù)器 |
正常的Response Code:200
錯(cuò)誤的Response Code:cloudServersFault (400, 500), serviceUnavailable (503), unauthorized (401), badRequest (400), overLimit (413)
1 public void creatServerVersion() throws Exception {
2 Client client = new Client();
3 WebResource webResource = client.resource("https://servers.api.rackspacecloud.com/v1.0/35428/servers");
4 ClientResponse response = null;
5 String creatServer = "{"
6 + "\"server\" : {"
7 + "\"name\" : \"CreateByAPP\","
8 + "\"imageId\" : 51,"
9 + "\"flavorId\" : 1,"
10 + "\"metadata\" : "
11 + "{\"My Server Name\" : \"Apache1\"}"
12 + "}" + "}";
13 try {
14 response = webResource.header("X-Auth-Token", authToken).
15 entity(creatServer, MediaType.APPLICATION_JSON_TYPE).post(ClientResponse.class);
16 } catch (Exception e) {
17 e.printStackTrace();
18 }
19 int status = response.getStatus();
20 switch (status) {
21 case 200:
22 System.out.println(IOUtils.toString(response.getEntityInputStream()));
23 break;
24 default:
25 throw new UniformInterfaceException(response);
26 }
27 }
主要參數(shù)說明:
1)name:server的name
2)imageId:基于那個(gè)image創(chuàng)建的instance
3)flavorId:硬件配置,每一個(gè)flavor都有唯一的內(nèi)存、硬盤大小(這里flavorId=1,代表內(nèi)存256M,硬盤10G)。
Sample JSON Response
1  {
2 "server" : {
3 "id" : 1235,
4 "name" : "new-server-test",
5 "imageId" : 2,
6 "flavorId" : 1,
7 "hostId" : "e4d909c290d0fb1ca068ffaddf22cbd0",
8 "progress" : 0,
9 "status" : "BUILD",
10 "adminPass" : "GFf1j9aP",
11 "metadata" : {
12 "My Server Name" : "Apache1"
13 },
14 "addresses" : {
15 "public" : [
16 "67.23.10.138"
17 ],
18 "private" : [
19 "10.176.42.19"
20 ]
21 }
22 }
23 }
四、刪除服務(wù)器
Verb |
URI |
Desc |
Delete |
/servers/id |
根據(jù)serverid,刪除指定的server |
正常的Response Code:202
錯(cuò)誤的Response Code:cloudServersFault (400, 500), serviceUnavailable (503), unauthorized (401), badRequest (400), overLimit (413)
關(guān)鍵代碼
ClientResponse response = webResource.header("X-Auth-Token", authToken).delete(ClientResponse.class);
更多的操作,可以去查詢API
2010-09-05
Alps
|
|
CALENDER
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
公告
留言簿(5)
隨筆分類
隨筆檔案
文章分類
最新評論

閱讀排行榜
評論排行榜
Powered By: 博客園 模板提供:滬江博客
|