RackSpace提供基于RESTful方式訪問的API。通過結(jié)合jersey可以方便的操作。
具體的API參見:http://docs.rackspacecloud.com/servers/api/v1.0/cs-devguide-20091015.pdf .
介紹幾個常用的API:
返回的格式有兩種,1、JSON; 2、XML.這里都返回Json
一、認(rèn)證
通過RESTful方式訪問云,首先要進(jìn)行身份驗證。
提供APIkey,通過驗證后云會返回給你一個AuthToken和ServerManagementUrl。
AuthToken的有效期只有24個小時,過期后需要重新認(rèn)證。
請求這個url時,需要傳入兩個參數(shù)
1)X-Auth-User:用戶名(RackSpace帳號)
2)X-Auth-Key:API Key(點擊Control Panel的Your Account菜單下的API Access獲得)
如果驗證成功,返回的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
兩個有用的信息是
1)X-Server-Management-Url:通過這個url可以對云進(jìn)行操作。
2)X-Auth-Token:身份令牌,每次操作時都要當(dāng)參入傳入,注意有時限,有效期為24小時。
二、獲得云里的服務(wù)器信息
正常的Response Code:200,203
錯誤的Response Code:cloudServersFault (400, 500), serviceUnavailable (503), unauthorized (401), badRequest (400), overLimit (413)
查詢詳細(xì)信息
Sample JSON Response (detail)
三、創(chuàng)建云中的服務(wù)器
正常的Response Code:200
錯誤的Response Code:cloudServersFault (400, 500), serviceUnavailable (503), unauthorized (401), badRequest (400), overLimit (413)
1)name:server的name
2)imageId:基于那個image創(chuàng)建的instance
3)flavorId:硬件配置,每一個flavor都有唯一的內(nèi)存、硬盤大小(這里flavorId=1,代表內(nèi)存256M,硬盤10G)。
Sample JSON Response
四、刪除服務(wù)器
正常的Response Code:202
錯誤的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
具體的API參見:http://docs.rackspacecloud.
介紹幾個常用的API:
返回的格式有兩種,1、JSON; 2、XML.這里都返回Json
一、認(rèn)證
通過RESTful方式訪問云,首先要進(jìn)行身份驗證。
提供APIkey,通過驗證后云會返回給你一個AuthToken和ServerManagementUrl。
AuthToken的有效期只有24個小時,過期后需要重新認(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)證的一個url。如果認(rèn)證通過response code是204.沒有通過則返回401.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 }
請求這個url時,需要傳入兩個參數(shù)
1)X-Auth-User:用戶名(RackSpace帳號)
2)X-Auth-Key:API Key(點擊Control Panel的Your Account菜單下的API Access獲得)
如果驗證成功,返回的Response如下:









1)X-Server-Management-Url:通過這個url可以對云進(jìn)行操作。
2)X-Auth-Token:身份令牌,每次操作時都要當(dāng)參入傳入,注意有時限,有效期為24小時。
二、獲得云里的服務(wù)器信息
Verb | URL | Desc |
Get | /servers | 列出所有的server(只有id和name) |
Get | /servers/detail | 列出所有的server(詳細(xì)信息) |
正常的Response Code:200,203
錯誤的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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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
}

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

三、創(chuàng)建云中的服務(wù)器
Verb | URI | Desc |
Post | /servers | 創(chuàng)建新服務(wù)器 |
正常的Response Code:200
錯誤的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ù)說明:
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

1)name:server的name
2)imageId:基于那個image創(chuàng)建的instance
3)flavorId:硬件配置,每一個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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

四、刪除服務(wù)器
Verb | URI | Desc |
Delete | /servers/id | 根據(jù)serverid,刪除指定的server |
正常的Response Code:202
錯誤的Response Code:cloudServersFault (400, 500), serviceUnavailable (503), unauthorized (401), badRequest (400), overLimit (413)
關(guān)鍵代碼

更多的操作,可以去查詢API
2010-09-05
Alps