LoginSignup
1
1

More than 5 years have passed since last update.

IIJ DNSアウトサービスのDO-APIをつかったサンプルプログラム

Last updated at Posted at 2015-11-01

IIJ DNSアウトサービスを使っていて、DO-APIを触る機会があったのですが、マニュアルのサンプルプログラムをそのまま流用するにはちょっと悩んだところがあったので、コピペで使えそうなものを残しておきます。

署名作成関数

signature.sh
### StringToSignを作成しKeyから署名を作成する
### http://manual.iij.jp/dns/doapi/754437.html
function signature
{
  IIJAPI_EXPIRE=$1
  METHOD=$2
  REQUEST_PATH=$3
  CONTENTMD5=$4
  CONTENTTYPE=$5

  ### URLエンコードは呼び手側で実施済みとする
  URL_ENC_PATH=${REQUEST_PATH}

  {
    echo    $METHOD
    echo    $CONTENTMD5
    echo    $CONTENTTYPE
    echo    "x-iijapi-expire:${IIJAPI_EXPIRE}"
    echo    "x-iijapi-signaturemethod:HmacSHA256"
    echo    "x-iijapi-signatureversion:2"
    echo -n "${URL_ENC_PATH}"
  } | openssl dgst -sha256 -binary -hmac $IIJAPI_SECRET_KEY $STRING_TO_SIGN | base64

  return 0
}

ECHO

echo.sh
### API:GET echo
### http://manual.iij.jp/dns/doapi/754637.html
function check_echo
{
  REQUEST_PATH="/r/${APIVERSION}/echo/qwerty12345.json"

  SIGNATURE=`signature ${IIJAPI_EXPIRE} "GET" ${REQUEST_PATH} "" ""`

  curl -s -H "x-iijapi-Expire:${IIJAPI_EXPIRE}" \
          -H "x-iijapi-SignatureMethod:HmacSHA256" \
          -H "x-iijapi-SignatureVersion:2" \
          -H "Authorization: IIJAPI ${IIJAPI_ACCESS_KEY}:${SIGNATURE}" \
           https://${HOST}${REQUEST_PATH}

  return 0
}

GET zones

get_zones.sh
### API:GET zones
### http://manual.iij.jp/dns/doapi/754466.html
function get_zones
{
  REQUEST_PATH="/r/${APIVERSION}/${DOSERVICECODE}/zones.json"

  SIGNATURE=`signature ${IIJAPI_EXPIRE} "GET" ${REQUEST_PATH} "" ""`

  curl -s -H "x-iijapi-Expire:${IIJAPI_EXPIRE}" \
          -H "x-iijapi-SignatureMethod:HmacSHA256" \
          -H "x-iijapi-SignatureVersion:2" \
          -H "Authorization: IIJAPI ${IIJAPI_ACCESS_KEY}:${SIGNATURE}" \
           https://${HOST}${REQUEST_PATH}

  return 0
}

GET records

get_records.sh
### API:GET records
### http://manual.iij.jp/dns/doapi/754619.html
function get_records
{
  REQUEST_PATH="/r/${APIVERSION}/${DOSERVICECODE}/${ZONE}/records/DETAIL.json"

  SIGNATURE=`signature ${IIJAPI_EXPIRE} "GET" ${REQUEST_PATH} "" ""`

  curl -s -H "x-iijapi-Expire:${IIJAPI_EXPIRE}" \
          -H "x-iijapi-SignatureMethod:HmacSHA256" \
          -H "x-iijapi-SignatureVersion:2" \
          -H "Authorization: IIJAPI ${IIJAPI_ACCESS_KEY}:${SIGNATURE}" \
           https://${HOST}${REQUEST_PATH}

  return 0
}

使い方

上記に記載したシェルの関数を使って、あとはサービスコードとアクセスキー、シークレットキーを与えて実行すればきっと動くと思います。
下記のサンプルは、ECHOで認証情報をチェックしたあと、ZONE情報を取得して、その先頭のZONEのレコード一覧を整形したjsonでダンプする例です。
エラー処理とか全く考慮していないので、適宜工夫してくださいね~。

sample.sh
### main ###
HOST="do.api.iij.jp"
APIVERSION="20140601"

IIJAPI_EXPIRE=`date -d '15 mins' +'%Y-%m-%dT%H:%M:%SZ'`

DOSERVICECODE=""
IIJAPI_ACCESS_KEY=""
IIJAPI_SECRET_KEY=""

check_echo > /dev/null
ZONE=`get_zones | jq -r '.ZoneList[0]'`
get_records | jq '.'

PUTの例

ここまでの例だとGETしか呼んでなかったのでPUTの例としてCOMMIT/RESETのコードも貼っておきます。
個人的にはリクエストボディが空の時に署名で使うCONTENTMD5文字列ってどうするのか試行錯誤したのですが、結局、空文字でいけました。
リクエストボディが必要なAPIを使う場合はリクエストボディの文字列をmd5sum関数に食わせて作成したハッシュ文字列を入れてくださいね。もちろんcurl呼ぶ時は -H "Content-MD5:{ハッシュ文字列}" を加えるのを忘れずに。

commit_reset.sh
### API:PUT commit
### http://manual.iij.jp/dns/doapi/754632.html
function commit
{
  REQUEST_PATH="/r/${APIVERSION}/${DOSERVICECODE}/commit.json"
  METHOD="PUT"
  CONTENTMD5=""
  CONTENTTYPE="application/json"

  SIGNATURE=`signature ${IIJAPI_EXPIRE} ${METHOD} ${REQUEST_PATH} "${CONTENTMD5}" "${CONTENTTYPE}"`

  curl -s -H "Content-Type:application/json" \
          -H "x-iijapi-Expire:${IIJAPI_EXPIRE}" \
          -H "x-iijapi-SignatureMethod:HmacSHA256" \
          -H "x-iijapi-SignatureVersion:2" \
          -H "Authorization: IIJAPI ${IIJAPI_ACCESS_KEY}:${SIGNATURE}" \
          -X ${METHOD} \
           https://${HOST}${REQUEST_PATH}

  return 0
}

### API:PUT reset
### http://manual.iij.jp/dns/doapi/754610.html
function reset
{
  REQUEST_PATH="/r/${APIVERSION}/${DOSERVICECODE}/${ZONE}/reset.json"
  METHOD="PUT"
  CONTENTMD5=""
  CONTENTTYPE="application/json"

  SIGNATURE=`signature ${IIJAPI_EXPIRE} ${METHOD} ${REQUEST_PATH} "${CONTENTMD5}" "${CONTENTTYPE}"`

  curl -s -H "Content-Type:application/json" \
          -H "x-iijapi-Expire:${IIJAPI_EXPIRE}" \
          -H "x-iijapi-SignatureMethod:HmacSHA256" \
          -H "x-iijapi-SignatureVersion:2" \
          -H "Authorization: IIJAPI ${IIJAPI_ACCESS_KEY}:${SIGNATURE}" \
          -X ${METHOD} \
           https://${HOST}${REQUEST_PATH}

  return 0
}
1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1