APIを使ってオブジェクトストレージを操作します。事前知識としてHTTPの仕組みや、JSON形式の理解が必要です。プログラム言語は利用者層の広いPHPを使用しますが、他のプログラム言語を使っている方でも理解しやすいよう、PHP固有の部分については解説を入れてあります。すべてのサンプルコードはこちらからダウンロードできます。APIを使いストレージを操作することができます。APIのリファレンスはオフィシャルサイトで見ることができます。ConoHaのAPIリファレンスに日本語訳がございますので、こちらもご活用ください。OpenStackには、KeyStoneという認証サービスがあります。オブジェクトストレージの認証にもKeyStoneが使用されるので、このAPIについても把握しておく必要があります。ReferenceOpenStackにはSDKが用意されていて、非常に多くの言語に対応しています。APIを使った実装をします。オブジェクトストレージへの接続情報を調べるConoHaのコントロールパネルにログインして、メニューから[アカウント]->[API]と進んでください。URLオブジェクトストレージエンドポイントこれらに加えて、あらかじめ設定したパスワードが必要になります。APIはHTTP通信ですので、各言語にあるHTTPクライアントライブラリを使えば良いです。PHPには様々なHTTPクライアントが用意されていますが、ここではcURL関数を使ってみます。cURL関数サンプルコードは、アカウント情報やパスワードなど、ユーザ固有の情報は[config.php]にまとめて定義するようになっています。実際に動かしてみる場合は、定数定義(defineのところ)を変更してから試してください。認証トークンの取得オブジェクトストレージに接続する前に、接続するためのトークンを取得します。最初に説明したとおり、これはSwiftではなくKeyStoneが担当します。HTTP的にどのようなやりとりになるかは、オフィシャルのドキュメントがわかりやすいです。JSON簡単に説明すると以下のようになります。passwordなど)Content-Typeはapplication/jsonレスポンスとして認証トークンを含んだJSONデータが返ってくる。これを実装したサンプルコードは[token-get.php]こちらです。json_decode()という、PHPの組み込み型とJSON文字列を相互変換する関数が用意されていてとても便利です。json_encode($data);13行目付近では、PHPの連想配列からAPIに渡すJSON文字列を組み立てています。サンプルコードの最後では、レスポンスのJSONデータからトークンと、オブジェクトストレージのエンドポイントURLを取得しています。このエンドポイントURLはコントロールパネルから確認できるものと同じです。ConoHaの場合は、このエンドポイントURLはユーザ毎に分かれていて、固定の値です。今後もこの仕様が変わらないとは限らないので、プログラムからオブジェクトストレージにアクセスする場合は、ここで取得したURLを使うようにするべきです。オブジェクトストレージへのアクセスそれでは、取得したトークンを用いて、オブジェクトストレージに接続します。URI構造オブジェクトストレージのAPIはRESTfulであり、URIで操作対象のオブジェクトを特定し、HTTPメソッドで操作方法を決定します。URIは次のような構造になっています。/v1/{アカウント名}/{コンテナ名}/{オブジェクトID}オブジェクトの情報を知りたい場合は上記のURIになりますが、アカウントの情報を知りたい場合は/v1/{アカウント名}というURIになります。URIとメソッドの動作については以下のリファレンスを確認してください。APIドキュメントHTTPヘッダーオブジェクトストレージでは、HTTPリクエスト内のHTTPヘッダーで認証パラメータを送信します。APIでオブジェクトストレージを操作する場合に共通です。HTTPヘッダーでは、コンテナやオブジェクトに対するさまざまなメタデータの設定も行えます。コンテナに対するPUTリクエストはコンテナの作成を行いますが、HTTPヘッダーで以下のような設定が可能です。v1コンテナの作成まずは、オブジェクトを格納するコンテナを作成します。ここではtest-conohaと言う名前でコンテナを作成します。application/json');トークンはX-Auth-Tokenヘッダーで指定します。'/test-conoha';この「test-container」の部分が作成するコンテナ名です。(tenane_name)の部分はコントロールパネルで表示される値で、ユーザ毎によって違う値になります。true,リクエストが正しく処理されたかどうかは、レスポンスのHTTPステータスコードで判断します。レスポンスにはボディは含まれません、ヘッダーのみです。わかりにくいので、CURLOPT_VERBOSEをセットしてHTTP通信の詳細を表示するようにしてあります。HTTPステータスコードを取得します。以下のようなステータスコードが返ってきます。"n";HTTPステータスコードを取得して表示します。コメントにあるとおり、基本的には201や202が返ってきます。次にコンテナの一覧を取得して、コンテナが作成されていることを確認します。コンテナの一覧を取得する場合は、テナントに対してGETリクエストを送ります。ENDPOINT_URL;cURLは明示的にメソッドを指定しないとGETリクエストを送信するので、オプションなどでのメソッド指定はありません。}]レスポンスは、このようなJSON形式の文字列になります(見やすくするために改行とインデントを入れてます)。test-conohaと言うコンテナが作成されていることが確認できます。byteフィールドはコンテナ内のオブジェクトの使用容量、countはオブジェクト数です。オブジェクトのアップロードとダウンロード次に作成したコンテナに、オブジェクトのアップロードとダウンロードを試してみます。リクエスト、オブジェクトをダウンロードする場合はGETリクエスト、オブジェクトの一覧を取得する場合は、コンテナに対してGETメソッドでリクエストを送信します。SEEK_SET);PHPのcURLでPUTリクエストを送る場合、cURLのオプションにファイルハンドルを渡す必要があります。ファイルハンドルとは、fopen()などが返すリソース型の変数です、ここではtmpfile()という関数を使っています。tmpfile()は、一時ファイルを作成そのファイルハンドルを返してくれる関数です。tmpfile()を使うメリットは、スクリプトの終了時に処理系が一時ファイルを自動的に削除してくれることです。Content-Typeヘッダーでアップロードするオブジェクトの形式を指定します。charset=utf-8',オブジェクトストレージは、テキスト、画像、動画など、どんな形式のデータでも扱うことができるのが特徴です。オブジェクトをアップロードする際に、その形式をContent-Typeヘッダーで指定することができます。オブジェクトをダウンロードする際には、アップロード時に指定したContent-TypeがHTTPレスポンスヘッダーにセットされます。$fp,オブジェクトの作成や更新にはPUTメソッドを使います。cURLで送信するファイルは、CURLOPT_INFILEオプションで指定します。先ほど説明したとおり、ここに渡すのはファイルハンドルです。オブジェクトの作成、更新が完了すると、HTTPステータスコード201が返ります。まとめRESTfulなAPIを使用することで、コンテナでもオブジェクトでも同じような操作が可能です。コンテナとオブジェクトの基本的な操作のみを取り上げましたが、オブジェクトストレージのほんの一部の機能しか使用していません。今回の基本を押さえておけば、あとはリファレンスを頼りに実装していくことが可能です。Registry構築編)お役立ち情報ConoHaではサポートコンテンツの他にも以下のようなお役立ち情報をご用意しております。Reserved.ページトップへ戻る。