APIリクエストサンプル(bash)

利用例につきましては本サンプルだけでなく「DNS API チュートリアル」も参照されることをおすすめいたします。

コマンドラインからの呼び出しサンプル

このサンプルは、APIの利用方法を紹介するためのものです。

サンプルコードでは、bash、OpenSSL、curl、その他UNIX commandを使用しています。


サンプルコード

domain-api.sh
#!/bin/bash

API_HOST=$1
METHOD=$2
REQUESTURI=$3
if [ "$METHOD" = "POST" -o "$METHOD" = "PUT" ]; then
  REQUESTBODY=$4
else
  QUERYSTRING=$4
fi

API_ACCESS_KEY=$IIJAPI_ACCESS_KEY
API_SECRET_KEY=$IIJAPI_SECRET_KEY

CONTENTMD5VALUE=""
CONTENTTYPEVALUE=""
if [ -n "$REQUESTBODY" ]; then
  CONTENTTYPEVALUE="application/json; charset=utf-8"
fi
EXPIRES=`date -u -d '1 hours' +%FT%H:%M:%SZ`

STRING_TO_SIGN=string2sign.$$
trap "test -f '$STRING_TO_SIGN' && /bin/rm '$STRING_TO_SIGN'" 0 1 2 3 15

echo    $METHOD                                > $STRING_TO_SIGN
echo    $CONTENTMD5VALUE                      >> $STRING_TO_SIGN
echo    $CONTENTTYPEVALUE                     >> $STRING_TO_SIGN
echo    "x-iijapi-expire:${EXPIRES}"          >> $STRING_TO_SIGN
echo    "x-iijapi-signaturemethod:HmacSHA256" >> $STRING_TO_SIGN
echo    "x-iijapi-signatureversion:2"         >> $STRING_TO_SIGN
echo -n $REQUESTURI                           >> $STRING_TO_SIGN

SIGNATURE=`openssl dgst -sha256 -binary -hmac "$API_SECRET_KEY" "$STRING_TO_SIGN" | base64`

if [ -n "$REQUESTBODY" ]; then
  curl \
   -H "x-iijapi-Expire: ${EXPIRES}" \
   -H "x-iijapi-SignatureMethod: HmacSHA256" \
   -H "x-iijapi-SignatureVersion: 2" \
   -H "Authorization: IIJAPI ${API_ACCESS_KEY}:${SIGNATURE}" \
   -H "Content-Type: ${CONTENTTYPEVALUE}" \
   -X $METHOD \
   -d "$REQUESTBODY" \
   -w '\n' \
  https://${API_HOST}${REQUESTURI}
elif [ -n "$QUERYSTRING" ]; then
  curl \
   -H "x-iijapi-Expire: ${EXPIRES}" \
   -H "x-iijapi-SignatureMethod: HmacSHA256" \
   -H "x-iijapi-SignatureVersion: 2" \
   -H "Authorization: IIJAPI ${API_ACCESS_KEY}:${SIGNATURE}" \
   -X $METHOD \
   -w '\n' \
  https://${API_HOST}${REQUESTURI}?${QUERYSTRING}
else
  curl \
   -H "x-iijapi-Expire: ${EXPIRES}" \
   -H "x-iijapi-SignatureMethod: HmacSHA256" \
   -H "x-iijapi-SignatureVersion: 2" \
   -H "Authorization: IIJAPI ${API_ACCESS_KEY}:${SIGNATURE}" \
   -H "Content-Type: ${CONTENTTYPEVALUE}" \
   -X $METHOD \
   -d "$REQUESTBODY" \
   -w '\n' \
  https://${API_HOST}${REQUESTURI}
fi

サンプルコード 実行例

サンプルコードに対して、アクセスキー及びシークレットキーを環境変数で与えます。

アクセスキーは、APIリクエスト実行時に使用します。

※このスクリプトはあくまでサンプルです。環境変数及びShellのhistoryから、アクセスキー及びシークレットキーが漏洩しないように十分に注意してください。

シークレットキーを入力してサンプルコードを実行する例
$ export IIJAPI_ACCESS_KEY='アクセスキー'
$ read -s IIJAPI_SECRET_KEY
(シークレットキーを入力します。入力した内容は表示されません)
$ export IIJAPI_SECRET_KEY
$ ./domain-api.sh 'domain.api.iij.jp' 'GET' '/r/20140601/dj#######/example.jp/name_servers.json
$ ./domain-api.sh 'domain.api.iij.jp' 'PUT' '/r/20140601/dj#######/example.jp/name_servers.json' '{"NameServerList":["ns1.example.jp",","ns2.example.jp"]}'
シークレットキーを一時的なファイル(iijapi_secret_key)に保存してサンプルコードを実行する例
$ export IIJAPI_ACCESS_KEY='アクセスキー'
$ vi iijapi_secret_key
 (シークレットキー)
$ export IIJAPI_SECRET_KEY=`head -1 iijapi_secret_key`
$ shred --remove iijapi_secret_key
$ ./domain-api.sh 'domain.api.iij.jp' 'GET' '/r/20140601/dj#######/example.jp/name_servers.json
$ ./domain-api.sh 'domain.api.iij.jp' 'PUT' '/r/20140601/dj#######/example.jp/name_servers.json' '{"NameServerList":["ns1.example.jp",","ns2.example.jp"]}'