[ConoHa API] ConoHaのAPIを使ってみる

## はじめに

久しぶりにSoftware Designを買って読み終わるとそこに魅惑的な宣伝が。

[「ConoHaのAPIをさわってレビューを書くだけで最新MacBookなどもれなくプレゼント！」](https://www.conoha.jp/lp/api_swdwdb/?banner_id=01021320&gclid=CjwKEAjw5disBRCA5r7OjsK_-UgSJAC27JPg5cn6BEh6eV2A96oH3BZc8-RLfAIbIoKgPqXcWeMeQRoCdZnw_wcB)

MacBookもほしいし、これはのっかるしかない！ということでAPIを触ってみてレビューを書くことにしました。

また、触るだけではつまらないので、サーバを管理するスマホアプリをつくろうと思います。


## ConoHaって？

ConoHaはOpenStackをベースとしたVPSサービスで、AmazonのEC2やS3のような機能が提供されています。Webページ上でさっくりサーバを立てたり消したりできて便利です。

## ConoHa API
で、そのサーバの管理をするためのAPIが[公開](https://www.conoha.jp/docs/)されています。ドキュメントには各APIに対してcurlでアクセスする例が載っており、とてもわかり易いです。

たとえばバージョン情報の取得は以下のように行います。

```
curl -i -X GET \
-H "Accept: application/json" \
https://identity.tyo1.conoha.io/v2.0
```

ちなみに、パラメータは以下のとおりですね。

- -i : 出力にヘッダを表示
- -X : リクエストコマンドの指定
- -H : ヘッダの指定

するとこんなレスポンスが返ってきます。

```
HTTP/1.1 200 OK
Server: openresty/1.7.10.1
Date: Sat, 04 Jul 2015 06:59:03 GMT
Content-Type: application/json
Content-Length: 310
Connection: keep-alive

{"version": {"status": "stable","updated": "2015-05-12T09:00:00Z","media-types": [{"base": "application/json"},{"base": "application/xml"}],"id": "v2.0","links": [{"href": "https://identity.tyo1.conoha.io/v2.0/","rel": "self"},{"href": "https://www.conoha.jp/docs/","type": "text/html","rel": "describedby"}]}}
```

"id": "v2.0" なのでバージョン２ですね。


## トークンの取得

バージョン情報の取得はだれでもできますが、サーバの管理を行うためには本人確認が必要です。そのためにトークンを取得し、リクエストの中に入れ込みます。

この情報は[このべん](https://www.conoha.jp/conoben/archives/10025)に詳しくまとめられています。


## サーバ一覧の取得

では自分のVPSサーバを立てて、その情報をAPIで取得してみます。

### tokens APIでトークンを発行

versionはGETで取得でしたが、[tokens](https://www.conoha.jp/docs/identity-post_tokens.html)はPOSTで取得します。POSTのときは-dでデータを送ります。

```
curl -i -X POST \
> -H "Accept: application/json" \
> -d '{"auth":{"passwordCredentials":{"username":"ナイショ","password":"ナイショ"},"tenantId":"ナイショ"}}' \
> https://identity.tyo1.conoha.io/v2.0/tokens
HTTP/1.1 200 OK
Server: openresty/1.7.10.1
Date: Sat, 04 Jul 2015 07:06:54 GMT
Content-Type: application/json
Content-Length: 2452
Connection: keep-alive

{"access":{"token":{"issued_at":"2015-07-04T07:06:54.719616","expires":"2015-07-05T07:06:54Z","id”:"ナイショ","tenant":{"name":以下略
```

idの部分が今後使用するトークンになります。また、expiresをみると発行してから15時間有効なようです。

### servers APIでVM一覧を取得

[servers](https://www.conoha.jp/docs/compute-get_vms_list.html)はGETで取得です。さっき発行したトークンをX-Auth-Tokenとしてヘッダに入れて送ります。

```
curl -i -X GET \
> -H "Accept: application/json" \
> -H "X-Auth-Token: トークン" \
> https://compute.tyo1.conoha.io/v2/テナントID/servers
HTTP/1.1 200 OK
Server: openresty/1.7.10.1
Date: Sat, 04 Jul 2015 07:12:51 GMT
Content-Type: application/json
Content-Length: 366
Connection: keep-alive

{"servers":[{"id":以下略
```

ちなみに、トークンを入れないと以下の様なエラーが発生します。

```
curl -i -X GET -H "Accept: application/json"  https://compute.tyo1.conoha.io/v2/テナントID/servers
HTTP/1.1 401 Unauthorized
Server: openresty/1.7.10.1
Date: Sat, 04 Jul 2015 07:16:01 GMT
Content-Type: application/json
Content-Length: 23
Connection: keep-alive
```

serversではVM名などの最小限の情報が手に入ります。現在の稼働状況やConoHaの管理ページで表示されているネームタグを表示したい場合は[servers/detail](https://www.conoha.jp/docs/compute-get_vms_detail.html)を使用します。

```
curl -i -X GET -H "Accept: application/json" -H "X-Auth-Token: トークン" https://compute.tyo1.conoha.io/v2/テナントID/servers/detail
HTTP/1.1 200 OK
Server: openresty/1.7.10.1
Date: Sat, 04 Jul 2015 07:19:20 GMT
Content-Type: application/json
Content-Length: 2121
Connection: keep-alive

{"servers":[{"status":"SHUTOFF","updated":"2015-07-02T21:00:37Z"以下略
```

"status":"SHUTOFF" で電源が落ちているのがわかりますね。


## 今後やること

APIを叩いてサーバを管理するスマホアプリを作ります。[PhoneGap](http://phonegap.com/)を使うことで、iPhoneでもAndroidでも動くアプリを目指します。

しばらくはブラウザ上で開発し、ある程度まとまったところでスマホアプリ化します。

また、APIのアクセスにはjQueryの$.ajaxを使用します。