APIリクエスト方法

ここではIDCFクラウドのコンピューティングのAPIのリクエスト方法を記載します。

コンテンツ一覧

事前準備

IDCFクラウドのコンピューティングのAPIを利用するためには以下の情報が必要となります。

  • エンドポイント
  • APIキー
  • シークレットキー

上記の情報は、IDCFクラウドのコンソール画面で確認することができます。

リクエスト方法

IDCFクラウドのコンピューティングではAPIキーと、APIキーとリクエストパラメーターとシークレットキーによって生成されるSignatureによって認証を行います。
ここでは、deployVirtualMachineコマンドを例にして実際のリクエスト方法を記載します。

Step1:リクエストパラメーターの確認

リクエストパラメーターは以下とします。
  • command=deployVirtualMachine
  • serviceofferingid=bd226b3b-6ae7-454d-b53d-c886f7eebe42
  • templateid=cc274af2-455e-47de-af55-48277c260758
  • name=idcf-vm
  • zoneid=95c8746d-57b3-421f-9375-34bea93e2a3d
  • response=json
  • apikey=LyHwhQzeySgbw1FBinrxjObdNx3LdF9KAM3JqRtAFRkYDrnKUiRBhrInpUuQN1aJOca4JOCpm2TNAr1Cob6yAg

Step2:リクエストURLフォーマットの確認

最終的なリクエストURLは以下のようになります。
https://$host/client/api?$query_string&signature=$signature
以下それぞれの変数の内容です。

  • $host=APIを受け付けるサーバー(例)compute.jp-east-2.idcfcloud.com)
  • $query_string=リクエストパラメーターを&で繋げたもの(例)command=deployVirtualMachine&...)
  • $signature=Signatureの生成に記載しています。

$query_stringに空白がある場合は、+ではなく、%20にエンコーディングします。

Step3:Signatureの生成

Step3-1:signature stringの生成

リクエストパラメーターについて以下の処理を行う。

  • パラメーター名でソートする。
  • パラメーター値をURLエンコードする。
  • パラメーター名とパラメーター値とを小文字にする。
  • パラメーター名とパラメーター値とを"="で結合する。
  • パラメーター名とパラメーター値との組み合わせを&で結合させる。

以下にsignature stringを生成するRubyのコードを記載します。

irb(main):001:0> require "cgi"
=> true
irb(main):018:0* params = {
irb(main):019:1*   command: "deployVirtualMachine",
irb(main):020:1*   serviceofferingid: "bd226b3b-6ae7-454d-b53d-c886f7eebe42",
irb(main):021:1*   templateid: "cc274af2-455e-47de-af55-48277c260758",
irb(main):022:1*   name: "idcf-vm",
irb(main):023:1*   zoneid: "95c8746d-57b3-421f-9375-34bea93e2a3d",
irb(main):024:1*   response: "json",
irb(main):025:1*   apikey: "LyHwhQzeySgbw1FBinrxjObdNx3LdF9KAM3JqRtAFRkYDrnKUiRBhrInpUuQN1aJOca4JOCpm2TNAr1Cob6yAg"
irb(main):026:1> }
=> {:command=>"deployVirtualMachine", :serviceofferingid=>"bd226b3b-6ae7-454d-b53d-c886f7eebe42", :templateid=>"cc274af2-455e-47de-af55-48277c260758", :name=>"idcf-vm", :zoneid=>"95c8746d-57b3-421f-9375-34bea93e2a3d", :response=>"json", :apikey=>"LyHwhQzeySgbw1FBinrxjObdNx3LdF9KAM3JqRtAFRkYDrnKUiRBhrInpUuQN1aJOca4JOCpm2TNAr1Cob6yAg"}
irb(main):032:0> signature_string = [].tap do |arr| 
irb(main):033:1*   params.keys.sort.each do |k|
irb(main):034:2*     arr << (k.to_s.downcase + "=" + CGI.escape(params[k]).gsub("+", "%20").downcase)
irb(main):035:2>   end
irb(main):036:1> end.join("&")
=> "apikey=lyhwhqzeysgbw1fbinrxjobdnx3ldf9kam3jqrtafrkydrnkuirbhrinpuuqn1ajoca4jocpm2tnar1cob6yag&command=deployvirtualmachine&name=idcf-vm&response=json&serviceofferingid=bd226b3b-6ae7-454d-b53d-c886f7eebe42&templateid=cc274af2-455e-47de-af55-48277c260758&zoneid=95c8746d-57b3-421f-9375-34bea93e2a3d"
irb(main):037:0> 

Step3-2:HMAC(ハッシュ値)の計算

$signature_stringとシークレットキーから、SHA-1でハッシュ値を計算する。
以下Rubyのサンプルプログラムです。

irb(main):038:0> hmac = OpenSSL::HMAC.digest(
irb(main):039:1*   "SHA1",
irb(main):040:1*   "XaUu-Kyx5jjElMUsQSepOjazWUQLmJZkC1LFPEBN0t54FJqIFu2BNY32HnX5g5ohjOKVEBSUy6rhIVbOrgErXQ",
irb(main):041:1*   signature_string
irb(main):042:1> )
=> "\xF8(\xBD\xB4^B\tZ\xB6)\xAD\xE2\x90\xD9g~v\xB41\x16"
irb(main):043:0> 

Step4-3:Base64でのエンコード

先に計算したハッシュ値をBase64でエンコードすることでSignatureを生成することができます。
以下Rubyのサンプルプログラムです。

irb(main):047:0> signature = Base64.encode64(hmac).strip
=> "+Ci9tF5CCVq2Ka3ikNlnfna0MRY="
irb(main):048:0> 

Step4:Query Stringの生成

リクエストパラメーターに以下の処理を行うことでQuery Stringを生成する。

  • パラメーター値をURLエンコードする。
  • パラメーター名とパラメーター値とを"="で結合する。
  • パラメーター名とパラメーター値との組み合わせを&で結合させる。

以下にQuery Stringを生成するRubyのコードを記載します。

irb(main):053:0> params.merge!(signature: signature)
=> {:command=>"deployVirtualMachine", :serviceofferingid=>"bd226b3b-6ae7-454d-b53d-c886f7eebe42", :templateid=>"cc274af2-455e-47de-af55-48277c260758", :name=>"idcf-vm", :zoneid=>"95c8746d-57b3-421f-9375-34bea93e2a3d", :response=>"json", :apikey=>"LyHwhQzeySgbw1FBinrxjObdNx3LdF9KAM3JqRtAFRkYDrnKUiRBhrInpUuQN1aJOca4JOCpm2TNAr1Cob6yAg", :signature=>"+Ci9tF5CCVq2Ka3ikNlnfna0MRY="}
irb(main):054:0> query_string = [].tap do |arr| 
irb(main):055:1*   params.keys.each do |k, v|
irb(main):056:2*     arr << (k.to_s + "=" + CGI.escape(params[k]).gsub("+", "%20"))
irb(main):057:2>   end
irb(main):058:1> end.join("&")
=> "command=deployVirtualMachine&serviceofferingid=bd226b3b-6ae7-454d-b53d-c886f7eebe42&templateid=cc274af2-455e-47de-af55-48277c260758&name=idcf-vm&zoneid=95c8746d-57b3-421f-9375-34bea93e2a3d&response=json&apikey=LyHwhQzeySgbw1FBinrxjObdNx3LdF9KAM3JqRtAFRkYDrnKUiRBhrInpUuQN1aJOca4JOCpm2TNAr1Cob6yAg&signature=%2BCi9tF5CCVq2Ka3ikNlnfna0MRY%3D"
irb(main):059:0> 

Step5:リクエスト実行

今までの手順で生成したsignaturequery_stringから生成されたURLに対してHTTP GETを実行することで、リクエストを送ることができます。
以下実行例となります。

~ $ curl --dump-header - 'https://compute.jp-east-2.idcfcloud.com/client/api?command=deployVirtualMachine&serviceofferingid=bd226b3b-6ae7-454d-b53d-c886f7eebe42&templateid=cc274af2-455e-47de-af55-48277c260758&name=idcf-vm&zoneid=95c8746d-57b3-421f-9375-34bea93e2a3d&response=json&apikey=LyHwhQzeySgbw1FBinrxjObdNx3LdF9KAM3JqRtAFRkYDrnKUiRBhrInpUuQN1aJOca4JOCpm2TNAr1Cob6yAg&signature=%2BCi9tF5CCVq2Ka3ikNlnfna0MRY%3D' 
HTTP/1.1 200 OK
Date: Mon, 06 Feb 2017 12:01:13 GMT
x-frame-options: SAMEORIGIN
Access-Control-Allow-Credentials: true
Set-Cookie: PHPSESSID=xxxxxmsojav6tjon5j891ot835; path=/; secure
charset: utf-8
Cache-Control: no-cache
Vary: Accept-Encoding
Content-Length: 125
Content-Type: application/json
Set-Cookie: TS0160c299=01e6a34ad487470ddb11468499c4385feeb47be6ca16237adcb25e9f1556bb1f112132709023adb2693f33cba7f6b3765fbf8d8298; Path=/

{"deployvirtualmachineresponse":{"id":"62e87b7e-3515-4743-9a67-e87cbf9e29bd","jobid":"f2561880-eb64-4208-862c-286948f101b7"}}%
~ $